播放器预制脚本执行顺序

player prefab script execution order

不确定问题出在哪里,所以我将尝试描述结果。

我有一个播放器对象和一个 UI 条,对应于播放器脚本中的变量,一切都按预期工作,然后我删除我的播放器对象并用播放器的相同预制件替换它,我将播放器对象重新分配给检查器中它之前附加的所有字段。

现在,当我点击播放时,UI 就好像 UI 脚本在播放器控制器脚本之后执行,并且一些值已关闭,以测试我更改了 'Script Execution Order' 面板中的执行顺序,这似乎解决了问题,但我不想诉诸于此。

我想知道什么会导致这种行为以及如何避免它,希望我的解释足够清楚。

谢谢。

我认为一般规则是 "whatever order they were loaded in."

这意味着场景中的脚本将 运行 在附加到预制件实例化到场景中的脚本之前 运行 在从资产包加载的脚本之前 运行由其他场景加载(当然,假设预制件在资产包加载之前实例化,这本身发生在场景转换之前)。

正如您所发现的,这使得它...不可靠。它本质上是 Unity 跟踪的单个 List<Component>,将新创建的脚本实例添加到末尾,并根据需要对其进行迭代以调用相关函数。

那么,您唯一的控制是手动执行顺序设置(如您所见)或不依赖 Unity 的脚本处理程序,而是使用您自己的代码手动执行。