【问题标题】:Execute an script's Start() after another script's Start() Unity C#在另一个脚本的 Start() Unity C# 之后执行一个脚本的 Start()
【发布时间】:2017-10-27 18:28:30
【问题描述】:

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

【问题讨论】:

    标签: c# unity3d unity5 unityscript


    【解决方案1】:

    我不太确定Start(),但您可以配置AwakeOnEnableUpdate脚本执行顺序。转到菜单编辑/项目设置并设置您的首选项,如manual section 中所述。因此,如果Start 也受到影响,您可能需要进一步调查 - 我相信它与Update 有点相关

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

    【讨论】:

    • 我 99% 确定 Start() 也会受到影响。
    【解决方案2】:

    如果你有一个脚本 (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 个月或更长时间之前是可以的。最糟糕的是,您将项目交给另一个编码员。然后你就有了“不可见”的依赖关系,其中包含你几乎无法调试的新错误,因为它们不在代码中。

    【讨论】:

      【解决方案3】:

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

        <SecondScriptName>().FunctionFromSecondScript();
      

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

      如果我犯了错误,请原谅我,因为这是我第一次帮助其他程序员的评论,而我自己目前也是一个萌芽。

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2017-03-14
        • 1970-01-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-09
        • 2020-11-21
        相关资源
        最近更新 更多