在另一个脚本的 Start() Unity C# 之后执行脚本的 Start()

Execute an script's Start() after another script's Start() Unity C#

我想 运行 一个脚本的 Start() 刚好在另一个脚本的 Start() 之前。可能吗?您可以选择脚本的执行顺序吗?

我不太确定 Start() 但您可以配置 AwakeOnEnable 和 [=13] 的 脚本执行顺序 =].转到菜单编辑/项目设置并设置您的首选项,如 manual section 中所述。因此,您可能想进一步调查 Start 是否也受到影响 - 我相信它与 Update

有点相关

总的来说,我会建议谨慎使用此功能。如果您 运行 遇到此列表中脚本过多的情况,则表明存在一些设计问题。

如果你有一个脚本 (A) 意味着 运行 一个接一个 (B),我想这意味着 A 依赖于 B。在这种情况下,你应该让 B 调用 A 传递所需的数据.

public class A : MonoBehaviour
{
     public void Init(State state){}
}

public class B : MonoBehaviour
{
     private State state;
     void Start()
     {
          this.state = SetState();
          this.gameObject.GetComponent<A>().Init(this.state);
     }
}

这可能是 运行 防止长时间调试的唯一方法。事实上,如果你使用脚本执行顺序,直到你有很多 类 并且你已经在该项目上工作了 6 个月或更长时间。最糟糕的是,您将项目交给了另一个编码员。然后你有 "invisible" 与新错误的依赖关系,你很难调试,因为它们不在代码中。

您可以做的通常是先执行您想要的脚本。但是,假设您想要 运行 第一个脚本末尾的另一个脚本,您可以通过使用它来引用一个函数(将 SecondScriptName 替换为您想要在第一个脚本之后使用的脚本,然后替换 FunctionFromSecondScript使用该脚本中的函数)

  <SecondScriptName>().FunctionFromSecondScript();

然后您可以按任意顺序依次调用所有函数。

如果我犯了错误,请原谅我,因为这是我第一次帮助另一个程序员发表评论,我自己目前也是一个崭露头角的人。

希望这对您有所帮助:)