我有代码:
[SerializeField]
Object[] _levels;
private void LoadLevel(int index)
{
var level = _levels[index];
SceneManager.LoadScene(level.name);
}
这段代码只适用于Unity编辑器,但当我构建它并运行时,抛出一个异常:
(文件名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
为enlightenment设置1个工作线程。线程& lt;Id: 46c -<优先级:1所有的经理都开始了
(文件名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 42)
NullReferenceException:对象引用没有设置为对象的实例
at beslicer . managing . missionmanager . loadlevel (Int32 index) [0x00000] in filename unknown<:0
信使号的1 [System.Int32]。广播(系统。String eventType, Int32 arg1, MessengerMode mode) [0x00000] in:0
信使号的1 [System.Int32]。广播(系统。String eventType, Int32 arg1) [0x00000] in在bsler . gui . uicontroller . oncontinuegame () [0x00000] in 调用UnityEngine.Events.InvokableCall.InvokeObject[] args) [0x00000] in 调用UnityEngine.Events.InvokableCallList.InvokeObject[] parameters) [0x00000] in 在UnityEngine.Events.UnityEventBase.InvokeObject[] parameters) [0x00000] in 在unityengine . events . unityeevent . invoke () [0x00000] in 在UnityEngine.UI.Button.Press () [0x00000] in UnityEngine.EventSystems. onpointerclickPointerEventData eventData) [0x00000] in UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) [0x00000] in 在UnityEngine.EventSystems.ExecuteEvents。[IPointerClickHandler] (UnityEngine执行。GameObject target, UnityEngine.EventSystems. baseeventdata, eventData, UnityEngine.EventSystems。EventFunction ' 1 functor) [0x00000] in UnityEngine。DebugLogHandler: Internal_LogException(例外,对象)
UnityEngine。DebugLogHandler: LogException(例外,对象)
UnityEngine。日志:LogException(例外,对象)
UnityEngine.Debug: LogException(异常)
UnityEngine.EventSystems。执行事件:执行(GameObject, BaseEventData, EventFunction ' 1)
UnityEngine.EventSystems.StandaloneInputModule: ProcessMousePress (MouseButtonEventData)
UnityEngine.EventSystems.StandaloneInputModule: ProcessMouseEvent (Int32)
UnityEngine.EventSystems.StandaloneInputModule: ProcessMouseEvent ()
UnityEngine.EventSystems.StandaloneInputModule:过程()
UnityEngine.EventSystems.EventSystem:更新()(Filename: Line: -1)
我将所有场景添加到"构建场景"列表中,但它没有帮助。
我发现SceneManager.LoadScene(int)
工作良好,问题只与字符串版本。
NullReferenceException:对象引用未设置为物体在…
这表示你正在尝试访问一个尚未初始化的对象。
输入LoadLevel(int)
function时,检查对象数组_levels
是否不为空。如果它是空的,确保在执行var level = _levels[index];
LoadLevel (Int32 index) [0x00000] in filename unknown<:0
LoadLevel方法有两个重载,从给定的错误日志中我可以看到unity正试图用INT数字而不是字符串加载你的关卡。也许你应该将它强制转换为string。
SceneManager.LoadScene((string)level.name);
或
SceneManager.LoadScene(level.name.toString());
确保level.name是正确的场景名称。
统一文档:
"给定的sceneName可以是路径的最后一部分,没有。unity扩展名,也可以是完整的路径,没有。unity扩展名。路径必须与"生成设置"窗口中显示的完全一致。如果只给出场景名称,这将加载列表中匹配的第一个场景。如果您有多个具有相同名称但不同路径的场景,则应该使用完整路径。"