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

5

我想在一个脚本的Start()函数执行之前,从另一个脚本中调用它。这可行吗?你可以选择脚本的执行顺序吗?

3个回答

7
我对Start()不是完全确定,但您可以配置AwakeOnEnableUpdate脚本执行顺序。转到菜单“编辑/项目设置”,并根据手册部分中所述设置您的首选项。因此,您可能需要进一步调查是否也会影响Start - 我认为会,因为它与Update有点相关。
总的来说,我建议谨慎使用此功能。如果您遇到在此列表中拥有太多脚本的情况,则说明存在一些设计问题。

2
我99%确定Start()也受到影响。 - Draco18s no longer trusts SE

3
如果您有一个脚本(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个月或更长时间之前,这是可以的。最糟糕的是,您将项目交给另一个编码器。然后您会遇到“隐形”的依赖关系和新的错误,由于它们不在代码中,您很难进行调试。


-1
你可能能够做的是先按照你想要的方式编写脚本。但是,假设你想在第一个脚本结束后运行另一个脚本,你可以使用以下方法引用一个函数(将SecondScriptName替换为你想在第一个脚本之后运行的脚本,然后将FunctionFromSecondScript替换为该脚本中的函数)。
  <SecondScriptName>().FunctionFromSecondScript();

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

如果我犯了错误,请原谅我,因为这是我第一次评论以帮助其他程序员,而我自己也是一个初学者。

希望这有所帮助 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接