おもちゃバコ

中身スカスカ♡

Unity: ScriptableObjectをEditor拡張で作成する

こんにちハローキティ
クリーニング代って意外に高いですね.

Editor拡張の勉強でScriptableObjectを作成するやつを開発した時のメモです.

参考サイト

下記のサイトを参考にしました.
49.233.81.186
qiita.com
ekulabo.com

動機

Unityでキャラクターのステータスをハードコーディングしてたのが辛くなったので,別の方法を探したらScriptableObjectを使うのが良いらしいと記事を見ました.

ただScriptableObjectを作成するだけではつまらないので,パラメータを入力してScriptableObjectを作成するEditor拡張を作成してみました.

完成

こんな感じのを作成しました.
Readボタンでマウスクリック選択されているアセットを読み込む.
また,ホットリロード時にも編集内容を表示するためにJSON形式でパラメータを保存など,便利かもしれない機能を盛り込んでいます.
f:id:lambda410:20210418211709p:plain
f:id:lambda410:20210418220639g:plain

実装

  1. ScriptableObjectを作成
    Assetを作成する.
    Editor拡張でしかSetterを使用できないようにしています.

2. EditorWindowを作成

3. キャラクスクリプトを作成
今回は十字キーで動くPlayerとしました.

簡単な解説

  1. ScriptableObjectを作成
    まず,Assetを作成するScriptableObjectを作成します.
    ScriptableObject側でもAsset作成は可能ですが,今回はEditor拡張側で作成するように実装したのでCreateAssetMenu属性はなく,単純な実装となっています.

  2. EditorWindowを作成
     0. CharacterDataAssetメンバ変数を作成.
      (m_character_data_asset)
     1. EditorWindowを作成します.
      (void Create())
     2. パラメータ設定用GUIを定義します.
      (void OnGUI())
     3. WriteボタンでGUIに入力したパラメータでアセットを作成する.   (void ExportAsset())
     4. ReadボタンでGUIのCharacter Nameまたは選択アセットを読み込む.
      (void ImportAsset())
     5. ホットリロード時に表示を保持するためJSON形式で入力内容を保存.
      (void OnEnable(), void OnDisable())

  3. キャラクスクリプトを作成
    SerializeField属性のCharacterDataAssetに作成したアセットをアタッチしてパラメータを読み込む.

終わりに

今度は.csvを読み込んで.assetを作成するEditor拡張を作成したいかもねぎ.
(.xlsxが読めたら最高だよね?)