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

vnzz0bqm  于 2022-11-15  发布在  C#
关注(0)|答案(3)|浏览(277)

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

vktxenjb

vktxenjb1#

我不完全确定Start(),但是您可以配置AwakeOnEnableUpdate的 * 脚本执行顺序 *。转到菜单“编辑/项目设置”,并按照manual section中的描述设置您的首选项。因此,您可能需要进一步调查Start是否也受到影响-我相信它是与Update相关的
一般来说,我会建议谨慎使用这个特性。如果你运行nto的情况下,有太多的脚本在这个列表中,这表明一些设计问题。

nwlls2ji

nwlls2ji2#

如果您有一个脚本(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个月或更长时间,这是很好的。最糟糕的是,你把项目交给了另一个程序员。然后你就有了“不可见”的依赖关系,你很难调试新的bug,因为它们不在代码中。

dldeef67

dldeef673#

你可以做的就是先执行你想要的脚本,不管你喜欢它。但是,假设你想在第一个脚本的末尾运行另一个脚本,你可以通过使用下面的语句引用一个函数(用你想在第一个脚本之后运行的脚本替换SecondScriptName,然后用那个脚本中的函数替换FunctionFromSecondScript)

<SecondScriptName>().FunctionFromSecondScript();

然后,您可以按照任何希望的顺序依次调用所有函数。
如果我犯了一个错误,请原谅我,因为这是我的第一次评论,以帮助另一个程序员,我目前是一个萌芽一个自己。
希望这对你有帮助:)

相关问题