Unity - > SceneManager.LoadScene(string)在RELEASE中不起作用

时间:2016-08-20 20:16:30

标签: unity3d

我有代码:

[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)效果很好,问题只在于字符串版本。

3 个答案:

答案 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是正确的场景名称。

Unity documentation:

“给定的sceneName可以是路径的最后一部分,没有.unity扩展名,也可以是没有.unity扩展名的完整路径。路径必须与Build Settings窗口中显示的完全相同。如果只是场景如果给出名称,则会加载列表中匹配的第一个场景。如果有多个场景具有相同的名称但路径不同,则应使用完整路径。“