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

时间:2017-05-26 19:15:20

标签: c# unity3d unity5 unityscript

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

3 个答案:

答案 0 :(得分:4)

我不完全确定Start(),但您可以配置AwakeOnEnableUpdate脚本执行订单。转到菜单编辑/项目设置,然后像manual section中所述设置您的首选项。因此,如果Start也受到影响,您可能需要进一步调查 - 我认为这与Update

有关

一般情况下,我建议您仔细使用此功能。如果您运行此列表中包含太多脚本的情况,则表明存在一些设计问题。

答案 1 :(得分:1)

如果你有一个脚本(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个月或更长时间之前就可以了。最糟糕的是,你把这个项目交给另一个程序员。然后你有&#34;隐形&#34;由于它们不在代码中,因此很难调试新错误的依赖项。

答案 2 :(得分:0)

您可以做的通常是首先按照您希望的方式执行您想要的脚本。但是,假设你想在第一个脚本的末尾运行另一个脚本,你可以使用它来引用一个函数(用你希望在第一个脚本之后的脚本替换SecondScriptName,然后用函数替换FunctionFromSecondScript)那个剧本)

  <SecondScriptName>().FunctionFromSecondScript();

然后,您可以按照您希望的顺序依次调用所有函数。

如果我犯了错误,请原谅我,因为这是我第一次帮助其他程序员的评论,而且我现在正在崭露头角。

希望这会有所帮助:)