当前位置:   article > 正文

Unity 中的 SetActive() 、 OnEnable()、OnDisable()

setactive

一、

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方法,来代替它:
 

  1. static public void SetActive(GameObject go, bool state)
  2. {
  3. if (go == null)
  4. {
  5. return;
  6. }
  7. if (go.activeSelf != state)
  8. {
  9. go.SetActive(state);
  10. }
  11. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/108070
推荐阅读
相关标签
  

闽ICP备14008679号