Basic 3D Unity Game Singleton 仅在 Build 中抛出 NullReferenceExce



我目前正在开发的基本2D Jump&Run游戏就是基于这个代码的。https://github.com/angelotadres/RunAndJump

Atm 当我运行构建时,它会给我抛出一个 NullReferenceException。以下是完整的调试消息:

NullReferenceException: Object reference not set to an instance of an object
at RunAndJump.LevelMetadata.get_SceneName () [0x0000c] in 
D:DropboxDropboxUnityRunAndJump-masterAssetsScriptsLevelLevelMetadata.cs:19 
at RunAndJump.LevelHandlerScene+<InitScene>c__Iterator1.MoveNext () [0x0006c] in D:DropboxDropboxUnityRunAndJump-masterAssetsScenesLevelHandlerLevelHandlerScene.cs:85 
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00028] in C:buildslaveunitybuildRuntimeExportCoroutines.cs:17 
UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) (at C:buildslaveunitybuildartifactsgeneratedcommonruntimeMonoBehaviourBindings.gen.cs:62)
RunAndJump.<InitSequence>c__Iterator0:MoveNext() (at D:DropboxDropboxUnityRunAndJump-masterAssetsScenesLevelHandlerLevelHandlerScene.cs:77)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) (at C:buildslaveunitybuildRuntimeExportCoroutines.cs:17)
UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator) (at C:buildslaveunitybuildartifactsgeneratedcommonruntimeMonoBehaviourBindings.gen.cs:62)
RunAndJump.LevelHandlerScene:Start() (at D:DropboxDropboxUnityRunAndJump-masterAssetsScenesLevelHandlerLevelHandlerScene.cs:58)

这是问题单例类:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Session : Singleton<Session>  {
    private LevelsPackage _levels;
    private int _currentLevelId = 0;
    private void Awake() {
        _levels = Resources.Load<LevelsPackage>(LevelsPackage.ResourcePath);
        Debug.Log(_levels);
    }
    public void PlayLevel(int id) {
        _currentLevelId = id;
    }
    public void PlayNext() {
        _currentLevelId++;
    }
    public LevelMetadata GetLevelMetadata() {
        return _levels.metadataList[_currentLevelId -1];
    }
    public bool HasNext() {
        return (_currentLevelId < _levels.metadataList.Count);
    }
    public int GetLevelId() {
        return _currentLevelId;
    }
    public int GetTotalLevels() {
        return _levels.metadataList.Count;
    }
}

任何想法为什么这只发生在构建中?谢谢!

附言LevelMetadata 类:

这是文件:

using UnityEngine;
using System;
namespace RunAndJump {
[Serializable]
public class LevelMetadata {
    public UnityEngine.Object scene;
    [SerializeField]
    private string levelName;
    public string LevelName {
        get { return (levelName == null || levelName == "") ? "Untitled" : levelName; }
        set { levelName = value; }
    }
    public string SceneName {
        get {
            Debug.Log ("Scene Name : " + scene.name);
            return scene.name;
        }
    }
}
}

NullReferenceException:对象引用未设置为对象的实例 在 RunAndJump.LevelMetadata.get_SceneName (( [0x0000c] in D:\Dropbox\Dropbox\Unity\RunAndJump-master\Assets\Scripts\Level\LevelMetadata.cs:19

仔细阅读错误:它说错误位于LevelMetadat.cs的第 19 行,并且在调用方法时发生get_SceneName()。现在您没有get_SceneName方法,但后台的属性创建为方法。因此,get_SceneName方法是名为 SceneName 的属性中的 getter 。所以问题出在下面的代码中:

public string SceneName {
    get {
        Debug.Log ("Scene Name : " + scene.name);
        return scene.name;
    }
}

在该代码中,唯一可能为 null 的项是 scene 。因此,您需要调试代码并找出scene为什么为 null。如果允许scene为 null,那么您需要像这样做一些事情:

public string SceneName {
    get {
        if (scene == null)
        {
            return string.Empty; //maybe or something else
        }
        Debug.Log ("Scene Name : " + scene.name);
        return scene.name;
    }
}

最新更新