【问题标题】:Loading scene in Unity makes the references in that scene null在 Unity 中加载场景会使该场景中的引用为空
【发布时间】:2020-05-10 18:55:24
【问题描述】:

我正在 Unity 中制作我的第一款游戏,并且我正在尝试在开始时的过场动画结束时加载它的第一关。我不知道是否有可能让脚本在视频剪辑结束后做一些事情,所以我这样写了我的代码:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.SceneManagement;

    public class CutsceneEnd : MonoBehaviour
    {
        // Start is called before the first frame update
        void Start()
        {
            StartCoroutine("wait");
        }
        IEnumerator wait()
        {
            yield return new WaitForSeconds(36);

            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
        }

    }

但问题不在于我等待视频结束的方法,而在于它加载的场景。我无法移动我的角色,因为脚本中的所有引用都是空的。我不知道我做错了什么。

【问题讨论】:

  • 您能否提供有关参考文献本身的更多信息?你怎么知道它们是空的?你如何分配它们?我很乐意帮助解决这个问题,但如果没有这些信息,我将无能为力。

标签: c# unity3d game-engine


【解决方案1】:

Unity 引用应该存储在场景文件中。你在使用像 git 这样的源代码控制吗?如果其他人没有将更改推送到 .unityscene 文件或关联脚本/预制件的 .meta 文件,则可能会破坏引用。

【讨论】:

    【解决方案2】:

    我认为我们需要更多信息。

    如果您在加载的场景中引用资产/游戏对象的引用(公共变量),那么您可能根本就没有将引用放在首位。 Unity 的公共变量应保存在场景文件中,并应始终与场景一起加载。

    仔细检查引用是否实际上为空。加载到场景时是否使用动画?这可以使您无法手动移动任何东西。例如,如果您在加载场景时为角色设置动画,它可能会卡在动画剪辑中,您将无法移动它。

    最后,如果您指的是在代码中创建的对其他脚本、对象或变量的引用,那么如果您不使用“DontDestroyOnLoad”,这些可能会在场景之间中断。

    在这里吐口水,我需要更多信息才能正确找到解决方案。

    【讨论】:

    • 我说的是代码引用。当它加载场景时,它会加载带有代码引用的新对象,但会将它们设为空。
    • @AhmedAli 抱歉,我还不能发表评论。这就是为什么我试图提供大量答案,所以我认为这符合规则。
    • @COFStudio 您在创建对象时是否使用了“new”关键字?我知道这听起来很简单,但这是一件容易被忽视的事情。如果您只声明要引用的对象但不初始化它('new' 关键字),那么它将显示为 null。
    • @whathm 我没有在脚本中创建对象
    • @COFStudio 那么您到底是如何引用这些对象的呢?序列化字段,公共变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多