【问题标题】:Unity: Camera.main is failing after I switch scenesUnity:切换场景后,Camera.main 失败
【发布时间】:2019-05-23 17:55:56
【问题描述】:

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

我有一个附加到特定场景独有的游戏对象的脚本,因此 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 不为空,并且不会像错误消息中所说的那样被破坏。这是我的完整脚本:

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);
        }
    }

上面的三个函数是我写的自定义函数,但我不知道为什么它们会导致问题,因为如果我直接启动场景它们就可以工作。

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

【问题讨论】:

  • Camera.main 将获取标签为Main Camera的相机
  • 对不起,我应该澄清一下。我们正在创建的这个游戏有很多相机,因为它是神秘风格的第一人称点击。我目前将所有相机设置为主相机,我只需根据需要启用/禁用它们以从一个点移动到另一个点。
  • 你每次都得到错误吗?您是否 100% 确定您没有更改代码?确保 Start() 方法的运行顺序没有任何依赖关系,例如“脚本 X 的 Start() 必须在 Y 的 Start() 之前运行才能使 Z 工作”
  • 哦等等,你说你禁用它了吗?如果没有标记为Main Camera 的活动摄像机,Camera.main 将返回null。但是您的错误说已销毁。你曾经破坏过相机吗?
  • 这就是我最初感到困惑的地方,因为我从不破坏相机,但正如我在回答中所说,它失败的原因是因为我有一个 DontDestroyOnLoad() 对象指向前一个场景中的相机,当我切换场景时,它失败了,因为我还没有将该变量重新分配给新场景中的相机。

标签: c# unity3d


【解决方案1】:

我相信您的 MainCamera 在场景之间被破坏了。将其设置为“DontDestroyOnLoad()”

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

【讨论】:

  • 请参阅我对问题发表的评论。我无法将其设置为 DontDestroyOnLoad,因为当时我需要使用不同的相机。我实际上只是想抓住当前激活的相机,但即使是 Camera.current 也无济于事。我的主要问题是我无法弄清楚为什么 Debug.Log(Camera.main) 工作,为我提供了活动相机的名称,但我接受相机的自定义函数提供了丢失的错误。我的函数在所有其他情况下都有效,因此该函数似乎不太可能出现问题,但我会再次检查以确保。
【解决方案2】:

啊,我修好了。我深入研究了我的自定义函数,发现我正在访问在游戏开始时设置的相机变量,然后是在每个相机转换时,但它失败了,因为我正在加载一个场景并且该场景还没有转换完成。我只需要在上面的脚本中重新分配那个变量,这样它就不会指向前一个场景中被破坏的对象。感谢 JiveTurkey 为我指明了正确的方向!

【讨论】:

  • 阅读不是我的强项。 :)
猜你喜欢
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多