エディタでゲーム再生中に変更した値を停止しても消さない方法
Unityはゲーム再生中のデータを残せない。
例えばPushを押す度にカウントが+1されるプログラムを組む。それをシーンに配置し、ゲームを再生前は0のカウントをプレイ中に5まで増やしたとする。その後再生を停止させてしまうと0に逆戻り、5から進行することは出来ない。
かといって絶対に出来ないという訳ではない。
例えばScriptableObjectを使用する方法がある。
[Unity]ScriptableObjectの使い方・・・?
[Unity]ScriptableObjectのhideFlagをリセット
ScriptableObjectマニュアル(日本語)
簡単な手順はこんな感じ。
- データを保持したいクラスを用意する(今回はSample.cs)。
- CreateScriptableObjectPrefubで1で用意したクラスをプレハブ化する。
- 適当なコンポーネントをシーンに配置し、そこから1で作ったプレハブを参照する。
参考資料
ちなみに、再生中にコンポーネントをコピーし、終了後にペーストすればゲーム実行時のコンポーネントを適応出来る。単体のコンポーネント情報を保持したい場合はコレでもOK。
間違ってはいけないのが、これはエディタ上でのみ有効な手順という事。要するにiOSやAndroidやWeb向けにビルドして出力した場合、ScriptableObjectの中身は変更されず、アプリを終了すると情報は失われる。
この場合、MsgpackやJSON等でシリアライズして保持するのが有効だ。間違っても大規模なデータをPlayerPrefsに突っ込んではいけない。(理由についてはこちらを参照)
ちなみに、エディタ上の単純な情報を保持したいだけならばUnityEditor.EditorPrefsがある。これはどちらかと言えばエディタ拡張で有効と思われ。
ちなみに、シーンを再生中に変更したデータを終了時にも保持させるアセットもある。
こっちの方はScriptableObjectを作らなくても保持出来るので、便利そうだ。
余りにも便利なので、記事にした。
[Unity]エディタ再生中の情報を停止時も保持するPlayModePersistが予想以上に使いやすい件