在Unity游戏开发中,跨场景持久的游戏管理器至关重要。 然而,一个常见的问题是脚本在开始时只执行一次,尽管它存在于所有场景中。
Unity 缺乏自动预加载机制。 如果没有专用的预加载场景,您的游戏管理器的初始化和基本组件将无法在场景转换中幸存。
解决此问题的方法如下:
所有核心游戏管理器功能(数据库连接、声音管理、分数跟踪等)都应作为组件附加到预加载场景中的“_app”游戏对象。 这保证了它们在所有后续场景中的持久性。
有两种方法可以从其他脚本访问游戏对象:
方法一:FindObjectOfType
在脚本的 Awake()
方法中使用它:
<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>(); Game game = Object.FindObjectOfType<Game>();</code>
方法二:静态全局变量(更高效)
更简化的方法使用静态全局变量:
<code class="language-C#">public static class GameManager { public static Sound sound; public static Game game; static GameManager() { GameObject app = GameObject.Find("_app"); sound = app.GetComponent<Sound>(); game = app.GetComponent<Game>(); } }</code>
通过创建预加载场景并将游戏管理器组件附加到持久性游戏对象,您可以确保所有 Unity 场景的一致执行。 选择最适合您的编码风格的对象访问方法。
以上是为什么我的 Unity 游戏管理器脚本只运行一次?的详细内容。更多信息请关注PHP中文网其他相关文章!