使用__脚本执行顺序 (Script Execution Order)__ 设置可以指定 Unity 在调用不同 MonoBehaviour 类的事件函数时采用的相对顺序。例如,可以指定 Unity 应该先运行 Rotation MonoBehaviour 脚本的事件函数,然后才运行 MoveForward MonoBehaviour 脚本的事件函数。
该顺序单独应用于事件函数的每个类别,所以 Unity 按指定顺序调用其在一帧内需要调用的任何 Awake 函数,随后按相同顺序来调用活动游戏对象的任何 Update 函数。
可以在项目设置检视面板 (Project Settings Inspector) 中调整脚本执行顺序 (Script Execution Order) 设置。访问菜单:__编辑 (Edit)__ > 项目设置 (Project Settings),然后选择__脚本执行顺序 (Script Execution Order)__ 类别。
注意:如果将多个脚本类型分配给多个游戏对象,则脚本执行顺序会指定一个类型的所有脚本在另一种类型的所有脚本之前执行,无论它们附加到哪个游戏对象。
使用加号 (+) 按钮将脚本添加到设置的 Inspector 窗口中,然后选择类名。要删除脚本,请使用位于列表中每个项目右侧的减号 (-) 按钮。
要指定执行顺序,请将列表中的项目拖动到所需位置,或编辑列表中某个类的顺序编号。分配的数字表示相对顺序。Unity 从上到下执行列表(从负顺序编号较大的脚本到正序号较高的脚本)。Unity 在__默认时间 (Default Time)__ 段内执行不在列表中的任何脚本,该时间段发生在任何具有负顺序编号的脚本之后以及任何具有正顺序编号的脚本之前。
顺序编号是任意数,不代表任何物理数量。编辑器将这些值存储在脚本元数据文件中。您可以在顺序编号之间留一些间隔,这有助于在列表中添加或移动其他脚本时避免进行无关的文件更改。
当额外加载多个场景时,一次为一个场景完整应用配置的脚本执行顺序。例如,如果配置的执行顺序为 Script1 > Script2 > Script3,Unity 会更新第一个场景中的所有 Script1 实例,然后更新第一个场景中的所有 Script2 实例,最后更新第一个场景中的所有 Script3 实例,然后在下一个场景中运行任何更新。
如果希望从代码中指定脚本执行顺序,而不是在编辑器中配置脚本执行顺序,则可以将 [DefaultExecutionOrder] 属性应用于 MonoBehaviour 派生类。如需了解更多信息,请参阅脚本 API 中的 DefaultExecutionOrder。
注意:在“脚本执行顺序 (Script Execution Order)”设置窗口中指定的执行顺序不会影响以 RuntimeInitializeOnLoadMethod 属性标记的函数的顺序,因为无法指定运行时初始化的顺序。此外,脚本执行顺序不会影响 OnDisable 和 OnDestroy 函数。
有关 Unity 在一帧内调用每个不同类别的事件函数的时间的信息,请参阅事件函数的执行顺序。
MonoManager