你自己写的monoBehavior要是没有那些方法的话,Inspector上的checkbox就会消失。当创建UI时,unity会自动创建eventSystem,可以看到该对象下有三个组件:EventSystem、StandaloneInputModule、TouchInputModule,后面两个组件都继承自BaseInputModule。
EventSystem组件主要负责处理输入、射线投射以及发送事件。一个场景中只能有一个EventSystem组件,并且需要BaseInputModule类型组件的协助才能工作。EventSystem在一开始的时候会把自己所属对象下的BaseInputModule类型组件加到一个内部列表,并且在每个Update周期通过接口UpdateModules接口调用这些基本输入模块的UpdateModule接口,然后BaseInputModule会在UpdateModule接口中将自己的状态修改成'Updated',之后BaseInputModule的Process接口才会被调用。
BaseInputModule是一个基类模块,负责发送输入事件(点击、拖拽、选中等)到具体对象。EventSystem下的所有输入模块都必须继承自BaseInputModule组件。StandaloneInputModule和TouchInputModule组件是系统提供的标准输入模块和触摸输入模块,我们可以通过继承BaseInputModule实现自己的输入模块。
除了以上两个组件,还有一个很重要的组件通过EventSystem对象我们看不到,它是BaseRaycaster组件。BaseRaycaster也是一个基类,前面说的输入模块要检测到鼠标事件必须有射线投射组件才能确定目标对象。系统实现的射线投射类组件有PhysicsRaycaster, Physics2DRaycaster, GraphicRaycaster。这个模块也是可以自己继承BaseRaycaster实现个性化定制。
总的来说,EventSystem 负责管理,BaseInputModule 负责输入,BaseRaycaster 负责确定目标对象,目标对象负责接收事件并处理,然后一个完整的事件系统就有了。
我出现过的错误:
1:在创建UI时,把eventSystem删除了,导致在使用sprite swap功能时,点击button无反应,这时要么自己创建一个点击事件,要么在路径hierarchy-create-UI-eventsystem添加一个eventsystem。如果是默认的material是不能删的,不过你直接在上面加上新的material,如果不是默认的话,点击cube,然后在inspector里面找的你要删除的material,在material的名字上面右键,就会出现remove component,就可以删掉了
unity3D 中判断一个gameobject是否存在代码如下:
//删除对象前先判断对象是否存在
if(target){
//target为Component组件类型就删除组件,常用的Transform、Rigidbody、MeshFilter,如
为GameObject 就删除对象
Destroy(target);
DebugLog(target==null);//false
//或者只删除对象
unity3D技巧
1Reset():只会在editor模式下触发。
2Awake():即在脚本初始化的时候执行一次。
3OnEnable():脚本依附在GameObject上后,场景被启动时,只有在SetActive(true)情况才会执行。
4Start():脚本开始运作执行一次。
5FixedUpdate():不受帧率的影响,按固定时间执行,常用于运动。
6Update():每一秒执行相应的次数,这里的次数即帧数,是根据硬件设备以及内部函数复杂度决定的,可能上一秒60帧,这一秒就是80帧,不唯一。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)