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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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();

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

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

希望这会有所帮助:)

【讨论】:

以上是关于在另一个脚本的 Start() Unity C# 之后执行一个脚本的 Start()的主要内容,如果未能解决你的问题,请参考以下文章

unity脚本中变量在另一个脚本如何调用

c# Unity - 如何在另一个类中调用结构对象数组

问一个简单的问题,用unity3d自己做游戏(业余),脚本方面需要学习c#的哪些方面,只学必要的,

Unity - 脚本的 Awake() 是不是在其他脚本的 Start() 之前运行?

Unity3DUnity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )

unity中的构造函数