播放器预制脚本执行顺序
player prefab script execution order
不确定问题出在哪里,所以我将尝试描述结果。
我有一个播放器对象和一个 UI 条,对应于播放器脚本中的变量,一切都按预期工作,然后我删除我的播放器对象并用播放器的相同预制件替换它,我将播放器对象重新分配给检查器中它之前附加的所有字段。
现在,当我点击播放时,UI 就好像 UI 脚本在播放器控制器脚本之后执行,并且一些值已关闭,以测试我更改了 'Script Execution Order' 面板中的执行顺序,这似乎解决了问题,但我不想诉诸于此。
我想知道什么会导致这种行为以及如何避免它,希望我的解释足够清楚。
谢谢。
我认为一般规则是 "whatever order they were loaded in."
这意味着场景中的脚本将 运行 在附加到预制件实例化到场景中的脚本之前 运行 在从资产包加载的脚本之前 运行由其他场景加载(当然,假设预制件在资产包加载之前实例化,这本身发生在场景转换之前)。
正如您所发现的,这使得它...不可靠。它本质上是 Unity 跟踪的单个 List<Component>
,将新创建的脚本实例添加到末尾,并根据需要对其进行迭代以调用相关函数。
那么,您唯一的控制是手动执行顺序设置(如您所见)或不依赖 Unity 的脚本处理程序,而是使用您自己的代码手动执行。
不确定问题出在哪里,所以我将尝试描述结果。
我有一个播放器对象和一个 UI 条,对应于播放器脚本中的变量,一切都按预期工作,然后我删除我的播放器对象并用播放器的相同预制件替换它,我将播放器对象重新分配给检查器中它之前附加的所有字段。
现在,当我点击播放时,UI 就好像 UI 脚本在播放器控制器脚本之后执行,并且一些值已关闭,以测试我更改了 'Script Execution Order' 面板中的执行顺序,这似乎解决了问题,但我不想诉诸于此。
我想知道什么会导致这种行为以及如何避免它,希望我的解释足够清楚。
谢谢。
我认为一般规则是 "whatever order they were loaded in."
这意味着场景中的脚本将 运行 在附加到预制件实例化到场景中的脚本之前 运行 在从资产包加载的脚本之前 运行由其他场景加载(当然,假设预制件在资产包加载之前实例化,这本身发生在场景转换之前)。
正如您所发现的,这使得它...不可靠。它本质上是 Unity 跟踪的单个 List<Component>
,将新创建的脚本实例添加到末尾,并根据需要对其进行迭代以调用相关函数。
那么,您唯一的控制是手动执行顺序设置(如您所见)或不依赖 Unity 的脚本处理程序,而是使用您自己的代码手动执行。