Unity 3D中的 SetActive() 与 OnEnable()、OnDisable()要注意的
2016-01-19 16:01
471 查看
一、
Unity 3D中的 GameObject.SetActive() 与 MonoBehaviour.OnEnable()、MonoBehaviour.OnDisable()其实这三之前的关系很简单:
SetActive(true),很触发MonoBehaviour.OnEnable()事件,就算对象之前本就是activeSelf==true,事件依然会发生;
SetActive(false),很触发MonoBehaviour.OnDisable()事件,就算对象之前本就是activeSelf==false,事件依然会发生;
二、问题
在实际的开发中,对SetActive的使用是非常频繁的,所以以对已经是activeSelf==true的对象,设置SetActive(true),和对已经是activeSelf==false的对象,设置SetActive(false)。很正常的,或者说是不可避免的。这样问题就来了,比如,我们连续多次都调用了SetActive(true),也会多次响应OnEnable()。就是说我们在保持对象是activeSelf==true的状态没有变化的情况下,OnEnable()方法会被多次执行。这时就它就会出问题了,当然也可能不会出问题,这个主要看人在OnEnable()实现的逻辑了。
同理,SetActive(false),和OnDisable()与会有同样的问题。
三、解决
其实解决这个问题的办法也很简单的,就是在每次SetActive()之先检测对就的activeSelf状态。我们可以封装一个自己的SetActive方法,来代替它:
static public void SetActive(GameObject go, bool state) { if (go == null) { return; } if (go.activeSelf != state) { go.SetActive(state); } }
相关文章推荐
- unity中刷路点
- 【小松教你手游开发】【unity实用技能】Unity3D_NGUI_性能优化实践_CPU卡顿
- 如何让Maya中的相机和Unity相机的FOV(Angle of View)对上
- 【小松教你手游开发】【unity实用技能】Unity3D中Assetbundle技术使用心得
- Unity3d 开发(七)AssetBundle组织目录
- Unity学习日记-使用脚本进行音频资源的读取,Resources.LoadAll
- unity, GUI.Button texture is black
- unity3d 简单的xml文件读写操作
- unity5.0新功能-布料、动画系统
- Unity C#多态
- Unity3d 综合性能窍门
- 初学unity3D-2016/01/18
- UNITY学习的第一天总结
- UNITY 5.2.3 & UNITY 5.2.4 发行说明 中文版
- Unity课程第一节
- unity AR开发中遇到的一些错误总结
- unity 3D 学习
- unity学习(一)
- 初学unity(简单认识unity工具)
- unity3d新手笔记