跳到主要内容

1 篇博文 含有标签「Cross-Scene」

Cross-scene event persistence

查看所有标签

跨场景事件:没人聊但人人踩的持久化问题

TinyGiants
GES Creator & Unity Games & Tools Developer

你的 AudioManager 播放背景音乐。它订阅了 OnLevelStart,在玩家进入新区域时切换曲目。你把 AudioManager 放在 DontDestroyOnLoad 对象上保持跨场景存活。开发期间一切正常,因为你一直在同一个场景里测试。

然后有人第一次从关卡 1 加载到关卡 2。音乐不切了。AudioManager 还活着 —— DontDestroyOnLoad 尽职了 —— 但事件订阅没有存活下来。或者更糟:旧的订阅还在,指向关卡 1 里已经被销毁的事件触发方,下次有东西尝试调用它时你会在游戏中途收到一个 MissingReferenceException

这就是持久化问题,每个有多个场景的 Unity 项目迟早都会撞上。