Unityのスクリプトでは、シーン名をそのまま使うと、シーン数が多くなってくるとタイプミスなどが怖いところです。ここはenumでシーンのリストを定義して、補完できるようにしましょう。簡単なコードで実現できます。DictionaryとLinqを使っています。
ヘルパークラス
static public class MyHelper { // シーンのリストをenumで作る public enum MyScene { Operation, Point, Scene2D, Scene3D } public static MyScene scene; // シーン名とenumのシーンとを対応させる static Dictionary<string, MyScene> sceneDic = new Dictionary<string, MyScene>() { {"Operation", MyScene.Operation }, {"Point", MyScene.Point }, {"Scene2D", MyScene.Scene2D }, {"Scene3D", MyScene.Scene3D } }; // 現在のシーンを取得する public static MyScene MyGetScene() { string sceneName = SceneManager.GetActiveScene().name; scene = sceneDic[sceneName]; return scene; } // enumのシーンで指定したシーンをロードする public static void MyLoadScene (MyScene scene) { SceneManager.LoadScene(sceneDic.FirstOrDefault(x => x.Value == scene).Key); } }
使用例
// 現在のシーンを再度ロードする public void ReloadCurrentSchene() { MyHelper.MyScene scene = MyHelper.MyGetScene(); MyHelper.MyLoadScene(scene); } // 現在のシーンの次のシーンに遷移する public void LoadNextSchene() { MyHelper.MyScene scene = MyHelper.MyGetScene(); if (scene == MyHelper.MyScene.Operation) { MyHelper.MyLoadScene(MyHelper.MyScene.Point); } else if (scene == MyHelper.MyScene.Point) { MyHelper.MyLoadScene(MyHelper.MyScene.Scene2D); } else if (scene == MyHelper.MyScene.Scene2D) { MyHelper.MyLoadScene(MyHelper.MyScene.Scene3D); } else if (scene == MyHelper.MyScene.Scene3D) { MyHelper.MyLoadScene(MyHelper.MyScene.Operation); } }
Unityってusing static
できないんですかねえ…