Unity中两个场景之间如何通信?

2 c# unity-game-engine scene

我想为我的播放器制作一个颜色系统。在我的游戏场景中,玩家可以拾取硬币,并且硬币数量将通过playerprefs保存,但我不知道如何在菜单场景中使用硬币数量。我也需要一些关于播放器颜色选择器的帮助。当玩家选择一种颜色时,在我的游戏场景中必须向玩家指示该颜色。所以我想,我需要知道如何在两个场景之间进行通信。有人可以帮我一些教程吗?

A__*_*A__ 6

有多种方法可以实现这一点,我觉得这取决于个人喜好:将数据保存到文件、使用 DoNotDestroyOnLoad...

但据我了解,现在推荐的方法是创建一个“管理器场景”,它将在应用程序的整个生命周期中保持活动状态,并在其他场景打开和关闭时将数据传入和传出,而不是使用 DontDestroyOnLoad:

建议避免使用 DontDestroyOnLoad 来持久保存您希望在场景加载中生存的管理器游戏对象。相反,创建一个包含所有管理器的管理器场景,并使用 SceneManager.LoadScene(, LoadSceneMode.Additive) 和 SceneManager.UnloadScene 来管理游戏进度。源代码

请参阅此处的Unity 指南。基本上,在任何给定时刻,您都会同时打开 2 个场景:经理场景和任何实际活动的游戏场景。然后,您可以通过事件委托在两个开放场景中的脚本之间进行通信。它的工作方式是:

  1. 玩家在场景 1 中选择颜色
  2. 颜色通过事件委托从 scene1 发送到管理器场景
  3. 场景1被卸载,场景2被加载
  4. 颜色从管理器场景发送到场景2

这是我现在在一个项目中使用的方法,如下所示: 在此输入图像描述

“0-Attract”、“1-Sealant”、“2-Paint”和“3-Conclusion”是我的实际游戏场景,“Manager Scene”包含所有其他场景中存在的所有内容(因此没有理由杀死和重生它们)以及我所有处理场景之间数据传递的“管理器”脚本。

请注意,多场景编辑一开始可能会令人困惑,因为您需要注意一些新事物(即哪个场景当前“活动”以及这意味着什么),因此请务必阅读我上面提出的统一指南。祝你好运!