読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

シーンの番号と名前の変換【Unity】【エディタ拡張】

Unity エディタ拡張

このエントリーをはてなブックマークに追加

はじめに

Unityでは各シーンに対して以下のように番号がふってあります。


f:id:kan_kikuchi:20150214065614p:plain


しかし、調べた限りだとこのシーン名とシーン番号の変換は出来ないっぽいです。


なので、今回はこの変換を行ってみます。


変換の方法は

  1. シーン名とシーン番号を管理する定数クラスを書き出す
  2. 1をやると同時にシーン名とシーン番号を記録したScriptableObjectを書き出す
  3. 2で書き出したScriptableObjectを読込み、変換メソッドを通じて変換

となっております。


ScriptableObject

ScriptableObjectとは、「読み込み専用の固定データ」みたいな感じです。

モンスターの能力など、ゲーム中には変更しないが、どこかに保持しておきたいデータなどに使えます。



細かい事は↑で!


SceneDataClassCreator

次に本題のコードです。



定数クラスを書き出しているConstantsClassCreatorの詳細は↓



SceneData.csがシーン名とシーン番号を記録するScriptableObjectで、

SceneManager.csが書き出したScriptableObjectを読込み、変換メソッドを実装したものです。


コードの流れは、シーン一覧から各シーン名を抜き出し、そこから定数クラスを作り、

シーン名とシーン番号が紐づいてるscenesNoDicからSceneDataを作り、書き出しています。


SceneDataClassCreatorをEditorディレクトリに入れ、[Tools]-[Create]-[Scene Data]を実行すると、

定数クラスSceneName.csとSceneNo.csSceneData形式のSceneData.assetが出力されます。


f:id:kan_kikuchi:20150214065623p:plain


上記にあるように書き出したデータの読込みとそれを使った変換メソッドは

SceneManagerというクラスに実装しています。


先ほど書き出したSceneNameやSceneNoを使って変換を行うと、以下のような感じになります。

//トップシーンの番号を取得
int topSceneNo       = SceneManager.Instance.SceneNameToSceneNo (SceneName.TOP);
//ゲームシーンの名前を取得
string gameSceneName = SceneManager.Instance.SceneNoToSceneName (SceneNo.GAME);


SceneNameやSceneNoがあるので、

ただシーン番号や名前を取得する時は変換する必要ないんですけどね…


シーンの番号と名前の変換の用途

知らんがな(´・ω・`)