我想为我的播放器制作一个颜色系统。在我的游戏场景中,玩家可以拾取硬币,并且硬币数量将通过playerprefs保存,但我不知道如何在菜单场景中使用硬币数量。 我也需要一些关于播放器颜色选择器的帮助。当玩家选择一种颜色时,在我的游戏场景中必须向玩家指示该颜色。 所以我想,我需要知道如何在两个场景之间进行通信。 有人可以帮我一些教程吗?
最佳答案
有多种方法可以实现此目的,我认为这取决于个人喜好:将数据保存到文件、使用 DoNotDestroyOnLoad...
但据我了解,现在推荐的方法是创建一个“管理器场景”,它将在应用程序的整个生命周期中保持事件状态,并在其他场景打开和关闭时将数据传入和传出,而不是使用不要在加载时销毁:
It is recommended to avoid using DontDestroyOnLoad to persist manager GameObjects that you want to survive across scene loads. Instead, create a manager scene that has all your managers and use SceneManager.LoadScene(, LoadSceneMode.Additive) and SceneManager.UnloadScene to manage your game progress. src
请参阅 Unity 指南 here 。基本上,在任何给定时刻,您都会同时打开 2 个场景:经理场景和任何实际事件的游戏场景。然后,您可以通过事件委托(delegate)在两个开放场景中的脚本之间进行通信。它的工作方式是:
- 玩家在场景 1 中选择颜色
- 颜色通过事件委托(delegate)从 scene1 发送到管理器场景
- 场景1已卸载,场景2已加载
- 颜色从管理器场景发送到场景2
“0-Attract”、“1-Sealant”、“2-Paint”和“3-Conclusion”是我的实际游戏场景,“Manager Scene”包含所有其他场景中存在的所有内容(因此没有理由杀死并重生它们)以及我所有处理场景之间数据传递的“管理器”脚本。
请注意,多场景编辑一开始可能会令人困惑,因为您需要注意一些新事物(即哪个场景当前“事件”以及这意味着什么),因此请务必阅读统一指南我在上面摆了姿势。祝你好运!
关于c# - Unity中两个场景之间如何通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61430366/