如何直接调用Update()或Start()或任何其他MonoBehaviour方法?
我通过在每个上面设置enabled = false;
来禁用我的大多数MonoBehaviour自动Update()调用,因为我需要在非常特定的时间为这些脚本安排Update()。
我正在考虑这样做:
List<MonoBehaviour> disabledScripts;
foreach (MonoBehaviour m in disabledScripts)
m.Update();
但是我不确定这是否是正确的方法,因为并非所有在disabledScripts中的MonoBehavi都实现了Update()。
答案 0 :(得分:1)
在对象启动时自动调用Start,引擎会在每帧上自动调用Update。
如果要控制调用脚本的Start()或Update()方法的顺序,请查看此http://docs.unity3d.com/Manual/class-ScriptExecution.html
如果您需要在受控时间或某些条件下执行某些代码,最好为每个对象创建一个特定方法,并创建一个控制器,以便在所需时间对每个对象调用此方法。
例如,您可以为每个对象保留Update()方法为空,并创建一个名为MyUpdate的方法(如果您愿意,可以使用参数),并根据您的游戏工作流程从控制器中调用它。
Unity的基本流程必须保持不变,因为它可能导致奇怪的行为。我无法想到Unity无法完成的自然流程。
编辑: 好的,我知道你不想创建复杂的功能只是为了尝试一些东西。
正如您所说,禁用该行为会强制引擎避免在给定MonoBehavi的每个帧上调用Update,但我不认为您可以按照建议调用Update,因为在MonoBehaviour中,Update没有方法修饰符(见method without access modifier)
无论如何,我会创建一个&#34; MyMonoBehaviour&#34;使用MyUpdate()函数扩展MonoBehaviour,您将覆盖每个扩展MyMonoBehaviour的对象。你可以调用MyUpdate函数做类似的事情(非常类似于你提出的代码):
List<MyMonoBehaviour> disabledScripts;
foreach (MyMonoBehaviour m in disabledScripts)
m.MyUpdate();
答案 1 :(得分:1)
好吧我明白了:
script.Update();
编译错误,正确的方法是:
script.SendMessage("Update");
我还发现设置enabled = false;
也会禁用其他一些方法,比如Start(),所以我想我只是扩展MonoBehaviour并将所有Update()代码移动到MyUpdate(),如antonio所说。 / p>