【Unity】シンプルなScriptableObjectを使ったマスターデータ作成
スポンサーリンク
シューティングゲームを作成していて、敵の経験値やHP、弾のスピードなどの情報を設定する必要が出てきました。
この場合「マスターデータ」を作成し、そこから各種の情報を設定し取得する方法がよく用いられます。
今回はUnityのScriptableObjectでマスターデータ機能を作ってみました。
スクリプト
今回は「MasterDataList」を作成しました。
ScriptableObjectは説明すると「大量のデータを格納できるオブジェクト」です。
「Unity側の説明」
https://docs.unity3d.com/ja/540/Manual/class-ScriptableObject.html
クラスの上の「CreateAssetMenu」はメニュー上(右クリック)でAssets配下に生成する物を指定します。
この場合は「MasterData/MasterDataList」からMasterDataListと言う名前のScriptableObjectを生成します。
MasterDataListの内容
マスターデータとして使用したいリストを作成しています。
今回はプレイヤーの初期情報、エネミーの複数データ、弾の複数データを作成します。
それぞれの必要データの中身は上記です。
IMData.csを継承していますが、中身はint型のIDを持っているだけです。
System.SerializableAttributeを必ず記入してください。
これを記入する事でEditer上で情報の設定が可能になります。
上記を作ったらUnityのAsset内ででMasterDataListを作成してみましょう。
Unityのマークがあるオブジェクトが生成されると思います。
呼び出し方
マスターデータを呼び出すクラスを作成しましょう。
今回はstatic型の「MasterDataManager」を作成しました。
「InitAllData」初期化用関数。先ほど作成したMasterDataListから情報を取得する。
「Get」: 設定したMasterDataを渡す。
使用方法は「MasterDataManager.Get().必要なデータ; 」の様に使います。
これを使用する事で エネミーやプレイヤーの情報を取得する過程を一元化でき、データとロジックの分離をする事でコードの保守性を高めることができます。
今回はかなりシンプルに作成しましたが、より改良を進めることができます。
- 元の情報をcsvなどに記入し、それをScriptableObjectnに記入する
- CodeBuilderを作成し、自動でマスターデータの更新を行う
いくらでも利便性を高められるので、是非試してみてください!