【发布时间】:2017-03-18 17:49:54
【问题描述】:
我在一个游戏对象(此处简化)上有一个脚本组件,它在创建时被禁用,使用 testObject.setActive(false)。
using UnityEngine;
public TestObject : MonoBehaviour {
public int testValue = 5;
void Start() {
testValue = 0;
}
public int GetTestValue() {
return testValue;
}
}
在禁用之前,GetTestValue 的返回是 0。一旦我重新启用对象,返回是 5。
Unity 文档说:
使游戏对象处于非活动状态将禁用所有组件...您附加到游戏对象的任何脚本将不再调用 Update()...
但是,组件的行为向我表明,脚本生成的 MonoBehaviour 并不是真正“禁用”,而是被破坏了。如果只有 Update() 停止被调用,那如何解释状态丢失?
这里的根本问题是:在不销毁脚本的情况下暂时禁用脚本的预期方法是什么?
【问题讨论】:
-
肯定比你说的要多。如果设置为 false,则引擎不会调用所有 Unity 方法(Update、LateUpdate、Collision...),但仍可以从其他地方调用公共方法并影响脚本的状态。例如,您仍然可以从另一个脚本调用 GetTestValue,即使它处于非活动状态。设置 on 和 off 不会影响变量的内容,也不会破坏实例。因此,要么您实际上是在其他地方销毁并创建一个新对象,要么您正在查看 2 个不同的对象,或者您正在其他地方重置该值。
-
@Everts:你说得对,还有“更多”。我应该明确说明在实例化之后立即发生停用。
标签: unity3d gameobject