Unity:切换场景后,Camera.main失败

时间:2019-05-23 17:55:56

标签: c# unity3d

我的一些代码有一个奇怪的问题,我真的可以使用一些帮助。

我有一个附加到游戏对象的脚本,该脚本对于特定场景是唯一的,因此Start()中的任何内容都只会在加载该场景时运行。在此脚本中,我将访问Camera.main,因为我使用了附加在摄像机游戏对象上的设置(这听起来可能效率不高,但是对于我们创建的游戏风格来说是必需的)。无论如何,如果我直接在Unity中从该场景开始,它就可以正常工作,但是如果我从介绍场景开始,然后加载到上述场景中,则会出现此错误:

MissingReferenceException: The object of type 'Camera' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

奇怪的是,我可以使用Debug.Log(Camera.main),它为我提供了相机的名称。因此Camera.main不为null,并且不会像错误消息中所述那样被销毁。这是我的完整脚本:

private void Start()
    {
        Debug.LogError(Camera.main);
        gameManager = FindObjectOfType<GameManagerScript>();
        if (Camera.main == null)
        {
            Debug.LogError("Camera.main is null");
        }
        else
        {
            gameManager.LoadMusic(Camera.main);
            gameManager.LoadAmbient(Camera.main);
            gameManager.FadeStereoPan(Camera.main.gameObject.GetComponent<SwipeActivator>().stereoPanInNode);
        }
    }

上面的三个函数是我编写的自定义函数,但是我不知道它们为什么会引起问题,因为如果直接启动场景它们会起作用。

几个月来我一直没有遇到这个问题,然后突然间,即使我没有更改任何代码,也遇到了这个错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我相信您的MainCamera在场景之间已被销毁。将其设置为“ DontDestroyOnLoad()”

查看以下Unity问题: https://answers.unity.com/questions/430141/need-the-same-main-camera-for-multiple-scenes.html

答案 1 :(得分:0)

啊,我修好了。我深入研究了自定义函数,发现我正在访问在游戏开始时设置的摄像机变量,然后在每次摄像机转换时都进行了访问,但是由于我正在加载场景并且该场景尚未进行任何转换,所以它失败了完成。我只需要在上面的脚本中重新分配该变量,这样它就不会指向先前场景中被破坏的对象。谢谢JiveTurkey为我指出正确的方向!