尝试创建基本场景元素检查器

时间:2018-07-11 20:02:49

标签: unity3d scene

我正在使用C#在Unity 2018.1.6中制作具有多个场景过渡的游戏,但是在活动场景中,我一次只想拥有一个主摄像机,一个场景控制器以及一个声音管理器实例。我这样做是为了使游戏的第一个场景包含这些元素(MainCamera,SceneManager),但不包含任何其他场景。

我现在将这些元素标记为“加载时不破坏”脚本,并且在场景更改时,这些gameObjects会继续进入下一个场景。

我想使用逻辑为这些元素构建另一个故障安全检查器:

  1. 如果场景中没有这些,请创建/实例化一个

  2. 如果有多个,请删除多余的。

(这将同时适用于Camera和SceneManager)

我想知道什么是最好的方法吗?

感谢您的帮助!

1 个答案:

答案 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.");
    }
}

请记住,尽管此属性不能保证创建的顺序/时间。

如果您的游戏脚本依赖于您的任何“必需品”,则您需要设计一种更简单明了的方法,始终首先创建依赖项。

我希望这会有所帮助。祝你好运!