C# 模拟对MonoBehavior的Update()调用

C# 模拟对MonoBehavior的Update()调用,c#,unity3d,C#,Unity3d,如何直接调用Update()或Start()或任何其他MonoBehavior方法 我通过设置enabled=false禁用了大多数monobhavior auto Update()调用,因为我需要在非常特定的时间为这些脚本设置time Update() 我正在考虑这样做: List<MonoBehaviour> disabledScripts; foreach (MonoBehaviour m in disabledScripts) m.Update(); 列出禁用的脚本

如何直接调用Update()或Start()或任何其他MonoBehavior方法

我通过设置
enabled=false禁用了大多数monobhavior auto Update()调用,因为我需要在非常特定的时间为这些脚本设置time Update()

我正在考虑这样做:

List<MonoBehaviour> disabledScripts;
foreach (MonoBehaviour m in disabledScripts)
    m.Update();
列出禁用的脚本;
foreach(禁用脚本中的单行为m)
m、 更新();

但我不确定这样做是否正确,因为并非禁用脚本中的所有MonoBehavior都实际实现了Update()。

在对象启动时自动调用Start,引擎在每个帧上自动调用Update

如果要控制脚本的Start()或Update()方法的调用顺序,请查看以下内容

如果您需要在受控的时间内执行某些代码,或者需要在特定的条件下执行某些代码,那么最好为每个对象创建一个特定的方法,并创建一个控制器,以便在所需的时间对每个对象调用此方法

例如,您可以为每个对象保留Update()方法为空,然后创建一个名为MyUpdate的方法(如果愿意,可以使用参数),并在需要时根据游戏的工作流从控制器调用该方法

统一的基本流程必须保持不变,因为它会导致奇怪的行为。我想不出有什么事情不能用统一的自然流动来完成

编辑: 好的,我知道你不想仅仅为了尝试一些东西而创建一个复杂的功能

正如您所说,禁用行为会迫使引擎避免为给定的MonoBehavior在每个帧上调用Update,但我认为您不能像您建议的那样调用Update,因为在MonoBehavior中,Update没有方法修饰符(请参阅)

无论如何,我将创建一个“MyMonoBehavior”,用一个MyUpdate()函数扩展MonoBehavior,您将覆盖扩展MyMonoBehavior的每个对象。您可以调用MyUpdate函数执行以下操作(与您建议的代码非常类似):

列出禁用的脚本;
foreach(禁用脚本中的MyMonoM)
m、 MyUpdate();

好吧,我想起来了:

script.Update();
编译错误,正确的方法是:

script.SendMessage("Update");

我还发现设置
enabled=false
还禁用了其他一些方法,比如Start(),所以我想我只是扩展MonoBehavior,将所有Update()代码移到MyUpdate(),正如antonio所说。

您没有回答我的第一个问题。虽然您是对的,但我应该使用与Update()不同的方法来实现这一点,但是仅仅测试一些东西需要做很多工作,而Update()目前可以很好地完成这项工作。
script.SendMessage("Update");