在Unity中加载场景会使得该场景中的引用变为空值

4

我正在使用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);
        }

    }

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


请问您能否提供有关这些引用本身的更多信息?您是如何知道它们为空的?您是如何分配它们的?我很乐意帮助解决这个问题,但首先需要这些信息。 - Jee
2个回答

1

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


0

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

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

请仔细检查引用是否实际为空。当您加载到场景时,您是否使用动画?这可能会阻止您手动移动任何内容。例如,如果您在加载场景时对角色进行动画处理,则它可能会被卡在动画剪辑中,您将无法移动它。

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

这只是我的猜测,我需要更多的信息才能正确找到解决方案。


我在谈论代码引用。当它加载场景时,它会加载具有代码引用的新对象,但将它们设置为 null。 - COF Studio
@AhmedAli 抱歉,我还没有评论的能力。这就是为什么我试图提供多种答案,所以我认为那应该符合规则。 - Jee
@COFStudio 在创建对象时是否使用了 'new' 关键字?我知道这听起来很简单,但这是一个容易被忽视的问题。如果你只声明了要引用的对象但没有初始化它(使用 'new' 关键字),那么它将显示为空值。 - Jee
@whathm 我没有在脚本中创建对象。 - COF Studio
@COFStudio 你是如何引用这些对象的呢?使用SerializedFields还是public变量? - Jee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接