第一次将游戏对象设置为活动状态会延迟

本文关键字:活动状态 延迟 设置 游戏 对象 第一次 | 更新日期: 2023-09-27 18:05:59

当我第一次在Canvas元素中设置一个特定的游戏对象为活动时(SetActive(true)),它会延迟一秒钟左右。顺序激活是瞬时的。请注意,这只发生在独立播放器。在编辑器中,它完全不会延迟。我的猜测显然是第一次加载资源。但是,我可以以任何方式预加载这个特定的资产吗?我试图在优化下的构建设置中这样做,但这并不影响任何事情。不,我没有任何代码在Start()函数或OnEnable()函数的上述游戏对象是被启用的。

第一次将游戏对象设置为活动状态会延迟

接受的答案是一种变通方法,而不是解决方案。保持数百个UI元素加载完全是对内存的浪费。

相反,你应该划分你的画布,正如Unity的这篇精彩文章所写的那样。延迟的原因是当你第一次启用一个对象时,Unity会更新所有的画布内容,甚至是禁用的对象。为了防止未使用的对象更新,将它们隔离在不同的画布中。如果你愿意,你甚至可以把这些画布作为原始画布的子画布。

这是意料之中的。延迟取决于UI组件和gameobject在Canvas的层次结构下的数量。当SetActive(true)Canvas或UI组件上使用时,有如此多的内存分配和绘制调用。解决办法很简单。而不是使用SetActive(true)的UI,通过修改enabled属性禁用组件。

例如,启用/禁用Canvas:

Canvas canvas;
canvas.enabled = true; //Enable
canvas.enabled = false; //Disable

假设您只想禁用Canvas下的Text组件,使用enabled属性来禁用Text组件而不是SetActive(true)。同样的事情也适用于其他UI组件。