Dis*_*Neo 5 unity-game-engine order-of-execution
Unity的文档中有这样一行:
默认情况下,不同脚本的Awake、OnEnable和Update函数按照脚本加载的顺序(任意)被调用。
所以我在这里有两个问题:
我有一段时间想知道 Unity 如何“决定”它在运行时的行为方式,特别是因为似乎有些东西在某些时候可以工作,但在其余时间它会导致崩溃或几乎没有解释的东西,但是该文档并没有真正提及太多,而且我似乎在其他地方找不到太多信息。
这种说法有些令人困惑。
Awake、OnEnable 和 Update始终会按顺序调用。
1.在此上下文中“任意”是什么意思?是随机的吗?
是的,它是随机的。不过,它并不是在谈论 Awake、OnEnable 和 Update 功能。这是在谈论脚本。脚本是随机选择执行的。
2.这是否还包括 Start() 和 Awake(),或者 Start() 是否有其自己的特殊行为,不遵循脚本执行顺序,即使该顺序已在项目设置中更改?
答案#1 也应该回答问题#2。这不会影响 Start()、Awake() 或 OnEnable() 等回调函数。
我想知道 Unity 如何“决定”它在运行时的行为方式,特别是因为似乎有些东西在某些时候可以工作,但在其余时间它会导致崩溃或几乎没有解释的东西
是的,这是真的。我过去也发生过这种情况。当您有包含许多脚本的大型项目时,更容易发生这种情况。脚本是随机调用的。GetComponent有时,您可能会因为无法工作而收到空异常错误。这就是为什么要进行脚本执行顺序设置,以便您始终可以设置脚本执行的顺序。
我解决此类问题的方法是GetComponent在协程函数中执行。之后,我检查它是否为空。如果为空,则等待一帧然后GetComponent重试。
同样,这适用于脚本的执行顺序,而不是调用回调函数的顺序。