zoukankan      html  css  js  c++  java
  • 【酷熊科技】工作积累 ----------- Unity 3D中的 SetActive() 与 OnEnable()、OnDisable()要注意的

    转载的文章

     

    Unity 3D中的 SetActive() 与 OnEnable()、OnDisable()要注意的

    一、

    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);
        }
    }
     
  • 相关阅读:
    2015年要做的150件事
    再见2014,你好2015
    页面滚动事件的使用
    简单的进度条演示
    mybatis foreach批量处理
    mysql执行顺序
    spring声明式事务 同一类内方法调用事务失效
    Semaphore
    springmvc使用JSR-303对复杂对象进行校验
    springmvc全局异常后返回JSON异常数据
  • 原文地址:https://www.cnblogs.com/dudu580231/p/6118882.html
Copyright © 2011-2022 走看看