気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity】シンプルなScriptableObjectを使ったマスターデータ作成

スポンサーリンク

 

シューティングゲームを作成していて、敵の経験値やHP、弾のスピードなどの情報を設定する必要が出てきました。

この場合「マスターデータ」を作成し、そこから各種の情報を設定し取得する方法がよく用いられます。

今回はUnityのScriptableObjectでマスターデータ機能を作ってみました。

f:id:Wojtek:20190526234832p:plain

 スクリプト

f:id:Wojtek:20190527000245p:plain

今回は「MasterDataList」を作成しました。
ScriptableObjectは説明すると「大量のデータを格納できるオブジェクト」です。

「Unity側の説明」

https://docs.unity3d.com/ja/540/Manual/class-ScriptableObject.html

 

クラスの上の「CreateAssetMenu」はメニュー上(右クリック)でAssets配下に生成する物を指定します。

この場合は「MasterData/MasterDataList」からMasterDataListと言う名前のScriptableObjectを生成します。

MasterDataListの内容

マスターデータとして使用したいリストを作成しています。

今回はプレイヤーの初期情報、エネミーの複数データ、弾の複数データを作成します。

f:id:Wojtek:20190527001043p:plain

それぞれの必要データの中身は上記です。

IMData.csを継承していますが、中身はint型のIDを持っているだけです。

System.SerializableAttributeを必ず記入してください。

これを記入する事でEditer上で情報の設定が可能になります。

 

上記を作ったらUnityのAsset内ででMasterDataListを作成してみましょう。

Unityのマークがあるオブジェクトが生成されると思います。

呼び出し方

f:id:Wojtek:20190527001701p:plain

マスターデータを呼び出すクラスを作成しましょう。

今回はstatic型の「MasterDataManager」を作成しました。

「InitAllData」初期化用関数。先ほど作成したMasterDataListから情報を取得する。

「Get」: 設定したMasterDataを渡す。

使用方法は「MasterDataManager.Get().必要なデータ; 」の様に使います。

これを使用する事で エネミーやプレイヤーの情報を取得する過程を一元化でき、データとロジックの分離をする事でコードの保守性を高めることができます。

今回はかなりシンプルに作成しましたが、より改良を進めることができます。

  • 元の情報をcsvなどに記入し、それをScriptableObjectnに記入する
  • CodeBuilderを作成し、自動でマスターデータの更新を行う

いくらでも利便性を高められるので、是非試してみてください!