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



我有代码:

[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扩展名。路径必须与"生成设置"窗口中显示的完全一致。如果只给出场景名称,这将加载列表中匹配的第一个场景。如果您有多个具有相同名称但不同路径的场景,则应该使用完整路径。"

最新更新