本日はHoloLensの表現調査枠です。
MRTKではSceneSystemと呼ばれる仕組みがあり、シーンロードなど複数のシーンを読み込み、遷移する際にMRTKのインスタンスを破壊することなく行うことができます。
しかし、[MRFeatureTools]を使用してMRTKを導入した場合SceneSystemが使用できなくなるトラブルがありました。
今回はSceneSystemに依存しないシーンロードを行います。
〇スクリプト
今回は次のようなスクリプトを描きました。
string[] _nowOpenScenes; public void LoadScene(string _sceneName) { //Get the list of currently open scenes. _nowOpenScenes = new string[UnityEngine.SceneManagement.SceneManager.sceneCount]; for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount ; i++) { string _OpensceneName = UnityEngine.SceneManagement.SceneManager.GetSceneAt(i).name; _nowOpenScenes[i] = _OpensceneName; } //If the selected scene is not open, load it. if (Array.IndexOf(_nowOpenScenes,_sceneName,0) == -1) { SceneManager.LoadScene(_sceneName,loadSceneMode); } //If the scene is already open, do nothing. if (Array.IndexOf(_nowOpenScenes,_sceneName,0) >= 1) { } }
〇SceneManager
[SceneManager]クラスは実行中にシーンの管理を行います。
今回はあらかじめ現在開いているシーンを[_nowOpenScenes]に格納します。
for分で開いているシーンの数開いているシーン名を取得します。
もし[_sceneName]で新たに開こうとしているシーンが既に開かれていた場合処理を行いません。
逆に現在開こうとしているシーンが開かれていない場合新たに読み込みます。
SceneManager.LoadScene(_sceneName,loadSceneMode);
[SceneManager.LoadScene]の第二引数[loadSceneMode]はシーンをどのように読み込むかを指定します。
これは現在開いているシーンに新たに読み込む[Addtive]と排他的に単一のシーンとしてロードする[Singe]の設定が行えます。
以上でシーンにロードする仕組みが実装できました。
今回は筆者のHoloLens 2がお休みしているためUnityエディタ上での画像になりますが実機でも同様に関数を呼び出すことでシーンをロードできます。