【酷熊科技】工作积累 ----------- Unity 3D中的 SetActive() 与 OnEnable()、OnDisable()要注意的...

本文详细介绍了Unity3D中GameObject.SetActive()函数与MonoBehaviour.OnEnable()、MonoBehaviour.OnDisable()事件之间的关系。阐述了在实际开发过程中多次调用SetActive()时可能遇到的问题,并提供了解决方案。

 

转载的文章

 

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); } }
 

转载于:https://www.cnblogs.com/dudu580231/p/6118882.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值