我正在使用C#在Unity 2018.1.6中制作具有多个场景过渡的游戏,但是在活动场景中,我一次只想拥有一个主摄像机,一个场景控制器以及一个声音管理器实例。我这样做是为了使游戏的第一个场景包含这些元素(MainCamera,SceneManager),但不包含任何其他场景。
我现在将这些元素标记为“加载时不破坏”脚本,并且在场景更改时,这些gameObjects会继续进入下一个场景。
我想使用逻辑为这些元素构建另一个故障安全检查器:
如果场景中没有这些,请创建/实例化一个
如果有多个,请删除多余的。
(这将同时适用于Camera和SceneManager)
我想知道什么是最好的方法吗?
感谢您的帮助!
答案 0 :(得分:0)
有很多不同的方法,关于什么是对的,什么是不对的各种意见。
一种简单的暴力手段是针对每个场景的根脚本自动创建您的根对象(该根对象又负责创建您的其他“基本”游戏对象)(如果不存在)。
另一种替代方法是使用RuntimeInitializeOnLoadMethodAttribute。 伪代码:
public class GameRoot : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod]
private static void CreateRoot ()
{
GameObject go = new GameObject();
go.AddComponent<GameRoot> ();
}
private void Awake ()
{
Debug.Log ("Root created. This will then ensure that the necessary essentials are created.");
}
}
请记住,尽管此属性不能保证创建的顺序/时间。
如果您的游戏脚本依赖于您的任何“必需品”,则您需要设计一种更简单明了的方法,始终首先创建依赖项。
我希望这会有所帮助。祝你好运!