2017-11-18 12 views
0

オブジェクトのリストがあります。彼らはUnityシーンです。オブジェクトの配列として格納されている場合、Unityシーン名を取得する方法

Unityのインスペクタでロードする必要がある順番を格納する便利な方法として、この配列にユニティシーンを埋めたいと思います。

私はこの配列

public int currentSceneNumber = 0; 
public void LoadNext() 
{ 
    if (scenes.Length >= currentSceneNumber + 1) 
    { 
     currentSceneNumber += 1; 
     SceneManager.LoadScene(scenes[currentSceneNumber].ToString()); 
    } 
    else 
    { 
     Debug.Log("Level.cs: Unable to load next level."); 
     return; 
    } 
} 

しかし、「scenename(UnityEngine.SceneAsset)」内の文字列の結果(ログイン(UnityEngineにシーンを回すへの参照を使用してレベルをロードするためのSceneManagerを使用しようとしました。 SceneAsset)問題の一部である。それは、次のエラーになります

Scene 'prototype02_Scene (UnityEngine.SceneAsset)' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded. 
To add a scene to the build settings use the menu File->Build Settings... 

は、どのように私は私の配列のシーンオブジェクトから文字列としてシーン名を取得するのですか?

+1

彼は '答えプログラマのための – ahmetson

答えて

1

あなたはできませんエディタの外でこれを行います。

public UnityEngine.Object[] scenes;を使用してシーンを保持すると、Unityはそれらのシーンを保持するプレースホルダとしてSceneAssetを使用します。

これに伴う問題は、SceneAssetはあなたのコードだけAssetDatabaseとエディタに動作することを意味しUnityEditor名前空間からのものであることです。スタンドアローンのプラットフォームで実行するようにビルドすることはできません。プロジェクトをビルドしようとすると、thisエラーが発生します。

これは(エディタで作業して構築する必要があります)すべてのシーンを取得し、配列に格納する方法である:

public Scene[] scenes; 

... 


void initScenes() 
{ 
    int sceneCount = SceneManager.sceneCountInBuildSettings; 
    scenes = new Scene[sceneCount]; 
    for (int i = 0; i < sceneCount; i++) 
    { 
     scenes[i] = SceneManager.GetSceneByBuildIndex(sceneCount); 
    } 
} 

あなたの積載コード:

SceneManager.LoadScene(scenes[currentSceneNumber].name); 

の場合これはエディタプラグインであり、エディタの外で構築または実行する必要があるものではないことを確信しています。

最初に、Object.ToString()はオブジェクトの の名前を取得するオーバーライド関数であるため、シーン名とは何の関係もないオブジェクト名を使用しています。

オブジェクト配列をSceneAssetにキャストして、現在行っているように、Objectの名前ではなくそのシーンの名前にアクセスしてください。

SceneManager.LoadScene(((SceneAsset)scenes[currentSceneNumber]).name); 

または

SceneAsset scene = scenes[currentSceneNumber] as SceneAsset; 
SceneManager.LoadScene(scene.name); 
+0

感謝をSettings'を構築し、再び自分のコードをチェックするために、すべてのシーンを追加し、明確に述べています。それはすべて意味をなさない。あなたは私が仕事を想像することができる提案された解決策ですが、残念ながら私が試みていることの目的を破っています。 ビルド設定ウィンドウを使用してシーンを整理する必要がないようにしたいと考えています。 ゲームビルドに関連する選択された量のシーンをインスペクタウインドウにドラッグアンドドロップするのが便利です。 – Jim

+0

ビルド設定を使用しないようにするには、より多くのコードを記述する必要があります。プロジェクトを構築するために使用できるカスタムのエディタビルドスクリプト(** ScriptA **)をメニューで記述する必要があります。その後、SceneAssetを配列に取り込む別のスクリプト(** ScriptB **)を書き込んでAssetBundleに追加し、AssetBundleをStreamingAssetsフォルダにコピーします。 ** ScriptA **からビルド機能をクリックすると、** ScriptB **で説明したアクションが実行され、** ScriptA **に戻り、プロジェクトがビルドされます。 – Programmer

関連する問題