【发布时间】:2017-10-27 18:28:30
【问题描述】:
我想在另一个脚本的 Start() 之前从一个脚本运行 Start()。可能吗?可以选择脚本的执行顺序吗?
【问题讨论】:
标签: c# unity3d unity5 unityscript
我想在另一个脚本的 Start() 之前从一个脚本运行 Start()。可能吗?可以选择脚本的执行顺序吗?
【问题讨论】:
标签: c# unity3d unity5 unityscript
我不太确定Start(),但您可以配置Awake、OnEnable 和Update 的脚本执行顺序。转到菜单编辑/项目设置并设置您的首选项,如manual section 中所述。因此,如果Start 也受到影响,您可能需要进一步调查 - 我相信它与Update 有点相关
一般来说,我会建议谨慎使用此功能。如果您遇到此列表中有太多脚本的情况,这表明存在一些设计问题。
【讨论】:
Start() 也会受到影响。
如果你有一个脚本 (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 个月或更长时间之前是可以的。最糟糕的是,您将项目交给另一个编码员。然后你就有了“不可见”的依赖关系,其中包含你几乎无法调试的新错误,因为它们不在代码中。
【讨论】:
您可以做的通常是先执行您想要的脚本,但您会喜欢它。但是,假设您想在第一个脚本的末尾运行另一个脚本,您可以使用它来引用一个函数(将 SecondScriptName 替换为您想要在第一个脚本之后执行的脚本,然后将 FunctionFromSecondScript 替换为来自的函数那个脚本)
<SecondScriptName>().FunctionFromSecondScript();
然后您可以按您希望的任何顺序依次调用所有函数。
如果我犯了错误,请原谅我,因为这是我第一次帮助其他程序员的评论,而我自己目前也是一个萌芽。
希望这会有所帮助:)
【讨论】: