我有代码:
[SerializeField]
Object[] _levels;
private void LoadLevel(int index)
{
var level = _levels[index];
SceneManager.LoadScene(level.name);
}
此代码仅适用于Unity Editor,但是当我构建并运行时,会抛出异常:
(文件名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp行:42)
为Enlighten设置1个工作线程。 线程 - < id:46c - <优先级:1 所有经理都开始了
(文件名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp行:42)
NullReferenceException:未将对象引用设置为对象的实例
在文件名未知的BeSlicer.Managering.MissionManager.LoadLevel(Int32索引)[0x00000]<:0
在Messenger`1 [System.Int32] .Broadcast(System.String eventType,Int32 arg1,MessengerMode模式)[0x00000] in< filename unknown&gt ;:0
在Messenger`1 [System.Int32] .Broadcast(System.String eventType,Int32 arg1)[0x00000] in< filename unknown<:0
at Beslicer.GUI.UIController.OnContinueGame()[0x00000] in< filename unknown<:0
在UnityEngine.Events.InvokableCall.Invoke(System.Object [] args)[0x00000] in< filename unknown<:0
在UnityEngine.Events.InvokableCallList.Invoke(System.Object [] parameters)[0x00000] in< filename unknown<:0
在UnityEngine.Events.UnityEventBase.Invoke(System.Object [] parameters)[0x00000] in< filename unknown<:0
在UnityEngine.Events.UnityEvent.Invoke()[0x00000] in< filename unknown<:0
在UnityEngine.UI.Button.Press()[0x00000] in< filename unknown<:0
在UnityEngine.UI.Button.OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData)[0x00000] in< filename unknown<:0
在UnityEngine.EventSystems.ExecuteEvents.Execute(IPointerClickHandler handler,UnityEngine.EventSystems.BaseEventData eventData)[0x00000] in< filename unknown<:0
在UnityEngine.EventSystems.ExecuteEvents.Execute [IPointerClickHandler](UnityEngine.GameObject target,UnityEngine.EventSystems.BaseEventData eventData,UnityEngine.EventSystems.EventFunction`1 functor)[0x00000] in< filename unknown<:0
UnityEngine.DebugLogHandler:Internal_LogException(Exception,Object)
UnityEngine.DebugLogHandler:LogException(Exception,Object)
UnityEngine.Logger:LogException(Exception,Object)
UnityEngine.Debug:LogException(例外)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject,BaseEventData,EventFunction`1)
UnityEngine.EventSystems.StandaloneInputModule:ProcessMousePress(MouseButtonEventData)
UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent(Int32)已
UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent()
UnityEngine.EventSystems.StandaloneInputModule:过程()
UnityEngine.EventSystems.EventSystem:更新()(文件名:行:-1)
我将所有场景添加到“场景中的场景”列表中,但它没有帮助。
我发现SceneManager.LoadScene(int)
效果很好,问题只在于字符串版本。
答案 0 :(得分:1)
LogisticRegression
LoadLevel方法有两个重载,从给定的错误日志中我可以看到unity正在尝试使用INT编号而不是字符串加载您的级别。可能你应该把它变成字符串。
LoadLevel (Int32 index) [0x00000] in filename unknown<:0
或
SceneManager.LoadScene((string)level.name);
答案 1 :(得分:1)
NullReferenceException:未将对象引用设置为的实例 对象在......
这就是说您正在尝试访问尚未初始化的对象。
输入_levels
函数时,检查对象数组LoadLevel(int)
是否为空。如果为null,请确保在执行var level = _levels[index];
答案 2 :(得分:0)
确保level.name是正确的场景名称。
“给定的sceneName可以是路径的最后一部分,没有.unity扩展名,也可以是没有.unity扩展名的完整路径。路径必须与Build Settings窗口中显示的完全相同。如果只是场景如果给出名称,则会加载列表中匹配的第一个场景。如果有多个场景具有相同的名称但路径不同,则应使用完整路径。“