はじめに
Unityでは各シーンに対して以下のように番号がふってあります。
しかし、調べた限りだとこのシーン名とシーン番号の変換は出来ないっぽいです。
なので、今回はこの変換を行ってみます。
変換の方法は
- シーン名とシーン番号を管理する定数クラスを書き出す
- 1をやると同時にシーン名とシーン番号を記録したScriptableObjectを書き出す
- 2で書き出したScriptableObjectを読込み、変換メソッドを通じて変換
となっております。
ScriptableObject
ScriptableObjectとは、「読み込み専用の固定データ」みたいな感じです。
モンスターの能力など、ゲーム中には変更しないが、どこかに保持しておきたいデータなどに使えます。
細かい事は↑で!
SceneDataClassCreator
次に本題のコードです。
定数クラスを書き出しているConstantsClassCreatorの詳細は↓
SceneData.csがシーン名とシーン番号を記録するScriptableObjectで、
SceneManager.csが書き出したScriptableObjectを読込み、変換メソッドを実装したものです。
コードの流れは、シーン一覧から各シーン名を抜き出し、そこから定数クラスを作り、
シーン名とシーン番号が紐づいてるscenesNoDicからSceneDataを作り、書き出しています。
SceneDataClassCreatorをEditorディレクトリに入れ、[Tools]-[Create]-[Scene Data]を実行すると、
定数クラスSceneName.csとSceneNo.cs、SceneData形式のSceneData.assetが出力されます。
上記にあるように書き出したデータの読込みとそれを使った変換メソッドは
SceneManagerというクラスに実装しています。
先ほど書き出したSceneNameやSceneNoを使って変換を行うと、以下のような感じになります。
//トップシーンの番号を取得 int topSceneNo = SceneManager.Instance.SceneNameToSceneNo (SceneName.TOP); //ゲームシーンの名前を取得 string gameSceneName = SceneManager.Instance.SceneNoToSceneName (SceneNo.GAME);
SceneNameやSceneNoがあるので、
ただシーン番号や名前を取得する時は変換する必要ないんですけどね…
シーンの番号と名前の変換の用途
知らんがな(´・ω・`)