Unity在新场景上调用方法

时间:2018-06-15 21:19:06

标签: unity3d

我有一堆场景的游戏,我加载它们然后做DoNotDestroy所以我保留它们(唤醒/开始第一次调用)。

假设我们有以下状态更改 - 菜单 - >游戏 - >游戏结束 - >菜单 - >游戏...

我想在每次显示场景时调用一个方法来重置/设置一些值。

最干净的方法是什么?目前我正在使用更新方法,但它需要很多行,如果你不需要在每个脚本中使用Update()是浪费的。

1 个答案:

答案 0 :(得分:2)

根据多场景编辑的Unity documentation,建议您避免使用DontDestroyOnLoad。

  

建议避免使用DontDestroyOnLoad来保留经理   想要在场景加载中存活的游戏对象。代替,   创建一个拥有所有经理和使用的经理场景   SceneManager.LoadScene(<path>, LoadSceneMode.Additive)和   SceneManager.UnloadScene来管理您的游戏进度。

因此,在您的情况下,您可以通过多种方式处理重置数据。但是一个简单的方法是检查刚刚加载的场景的名称,来自&#34; Manager&#34;现场。例如。 BaseScene中的MySceneManager。在以下代码中,我们正在使用sceneLoaded的{​​{1}}代表。

SceneManager

N.B。遗憾的是,这种方法无法对您的场景名称进行编译时检查,因此您必须小心确保您的场景名称与切换案例相对应。

但是,另外要记住的是,新加载的场景中的任何组件都会调用using UnityEngine; using UnityEngine.SceneManagement; public class MySceneManager : MonoBehaviour { void OnEnable ( ) => SceneManager.sceneLoaded += OnSceneLoaded; void OnSceneLoaded ( Scene scene, LoadSceneMode mode ) { switch ( scene.name.ToLower ( ) ) { case "menu": // Do some "menu" initialisation here... break; case "game": // Do some "game" initialisation here... break; case "gameover": // Do some "gameover" initialisation here... break; } } void OnDisable ( ) => SceneManager.sceneLoaded -= OnSceneLoaded; } ,因此您可以将所有场景初始化卸载到每个场景中的组件。这会将MySceneManager与每个场景中的数据分离。

所以,你有很多选择,这些只是其中两个。最好的&#34;选项将是您满意的选择,并且符合您的需求。