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

标签 c# unity-game-engine scene

我想为我的播放器制作一个颜色系统。在我的游戏场景中,玩家可以拾取硬币,并且硬币数量将通过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. 玩家在场景 1 中选择颜色
  2. 颜色通过事件委托(delegate)从 scene1 发送到管理器场景
  3. 场景1已卸载,场景2已加载
  4. 颜色从管理器场景发送到场景2

这是我现在在一个项目中使用的方法,如下所示: enter image description here

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

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

关于c# - Unity中两个场景之间如何通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61430366/

相关文章:

unity-game-engine - 统一无限生成游戏对象

user-interface - Unity3D 中 GUI 元素的屏幕位置

java - 使用 JavaFX 中的计时器平移场景的矩形

c# - 对于错误的类型,反序列化的 JSON 对象不为空

c# - Interlocked.CompareExchange 真的比简单的锁更快吗?

c# - 使用 JSON 和 MultipartEntity 将图像从 Android 发送到 WCF

c# - 可空类型如何使用比较运算符处理空值?

android - native 崩溃信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR)

iOS,在不使用 segue 的情况下为场景设置委托(delegate)

三.js:如何统计场景中添加的对象