2016-08-20 9 views
-1

では動作しません。私はコードがあります。ユニティ> SceneManager.LoadScene(文字列)RELEASE

[SerializeField] 
Object[] _levels; 

private void LoadLevel(int index) 
{ 
    var level = _levels[index]; 
    SceneManager.LoadScene(level.name); 
} 

をこのコードは、ユニティ・エディタからのみ動作しますが、私はそれを構築し、実行すると、例外がスローされます。

(ファイル名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cppライン:42)

啓発のための1つのワーカースレッドを設定します。 スレッド - < ID:46C - <優先順位:1人の すべての管理者が

を起動

(ファイル名:C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cppライン:42)


とNullReferenceException:<未知のファイル名の[0x00000] BeSlicer.Managering.MissionManager.LoadLevel(のInt32インデックス)で
オブジェクトのインスタンスに設定されていないオブジェクト参照:0
Messenger`1で[ Sy (System.String eventType、Int32 arg1)で:>:0
の[0x00000]の[0x00000] )[0x00000] <ファイル名に未知<:0 UnityEngine.Events.InvokableCall.Invokeで
(System.Objectの[:BeSlicer.GUI.UIController.OnContinueGame()[0x00000]で0
<名不明<で] args)[0x00000] in <ファイル名不明<:0
at U nityEngine.Events.InvokableCallList.Invoke(System.Objectの[]パラメータ)[0x00000] <未知<名:0
UnityEngine.Events.UnityEventBase.Invoke(System.Objectの[]パラメータ)で[0x00000] <ファイル名に0:<不明<ファイル名にUnityEngine.UI.Button.Pressで0
()[0x00000]:<未知<ファイル名にUnityEngine.Events.UnityEvent.Invoke(AT 0
)[0x00000]:不明<
at UnityEngine.UI.Button.OnPointerClick(UnityEngine.E <未知<ファイル名にUnityEngine.EventSystems.ExecuteEvents.Execute(IPointerClickHandlerハンドラ、UnityEngine.EventSystems.BaseEventData EVENTDATA)で0
[0x00000]:0
<未知<ファイル名にventSystems.PointerEventData EVENTDATA)[0x00000] UnityEngine.EventSystems.ExecuteEvents.Execute [IPointerClickHandler(UnityEngine.GameObject対象、UnityEngine.EventSystems.BaseEventData EVENTDATA、UnityEngine.EventSystems.EventFunction`1ファンクタ)[0x00000]で<未知<名:0
UnityEngine。DebugLogHandler:Internal_LogException(例外、オブジェクト)
UnityEngine.DebugLogHandler:たlogException(例外、オブジェクト)
UnityEngine.Logger:たlogException(例外、オブジェクト)
UnityEngine.Debug:たlogException(例外)
UnityEngine。 EventSystems.ExecuteEvents:(ゲームオブジェクト、BaseEventData、EventFunction`1)を実行
UnityEngine.EventSystems.StandaloneInputModule:ProcessMousePress(MouseButtonEventData)
UnityEngine.EventSystems.StandaloneInputMo dule:ProcessMouseEvent(Int32)を
UnityEngine.EventSystems.StandaloneInputModule:ProcessMouseEvent()
UnityEngine.EventSystems.StandaloneInputModule:プロセス()
UnityEngine.EventSystems.EventSystem:アップデート()

(ファイル名:ライン:-1)

"シーンのビルド"リストにすべてのシーンを追加しましたが、それは役に立ちません。

私は、SceneManager.LoadScene(int)が問題なく動作することを発見しました。文字列バージョンでのみ問題です。

答えて

1

とNullReferenceException:オブジェクト参照が

この

はあなたがアクセスしようとしていると言っている...で オブジェクトのインスタンスに設定されていません初期化されていないオブジェクト。

LoadLevel(int)関数を入力したときに、オブジェクト配列_levelsがnullでないことを確認してください。 nullの場合は、それを初期化する前に必ず初期化してくださいvar level = _levels[index];

+0

シーンアセットをシリアル化フィールドに割り当てようとしましたが、リリースモードでは、シーンアセットへの参照がNULLになります。だから私はそれを 'string []'に変更して名前を明示的に指定し、うまく動作します。 –

0

level.nameが正しいシーン名であることを確認してください。

Unity documentation:

は、「与えられたsceneNameは.unity拡張子または.unity拡張子なしまだ完全なパスなし、パスの最後の部分のいずれかとすることができる。パスが正確でなければならビルド設定に示すように、 Window。シーン名だけが与えられている場合、これは一致するリスト内の最初のシーンをロードします。同じ名前で複数のシーンがある場合は、完全パスを使用する必要があります。

1
LoadLevel (Int32 index) [0x00000] in filename unknown<:0 

LoadLevel方法は、私はその団結はINT番号ではない文字列を使用してレベルをロードしようとしている見ることができ、特定のエラー・ログから2つのオーバーロードがあります。おそらくあなたはそれを文字列にキャストする必要があります。

SceneManager.LoadScene((string)level.name); 

または

SceneManager.LoadScene(level.name.toString()); 
+0

言語がデフォルトで正しいオーバーライドを選択しなかったのはなぜですか?キャスティングはめったに解決策ではありません。 – Droppy

+0

私はこれを知りません。おそらく、これが原因です:Object [] _levels;通常、正しいオーバーロードを理解する必要があります。プログラマの過ちです。 – AminSojoudi

+1

確かに; 'Level'クラスが表示されていないので、質問は貧弱です。なぜそれがLevel [] _levelsではないのかは非常に不明です。 – Droppy

関連する問題