2018/7/8エディター拡張をしてみたんでMEMO少し手の込んだことをしてみました。ScriptableObjectを使ったアセットを自分で作ったアセットを自動で生成ディレクトリやファイルを自動で作成ScriptableObjectのインスペクタ―ウィンドウを変える一日分時間が潰れた!少しめちゃくちゃ遠回りをしてしまったように思います。参考になるサイトエディタ拡張入門エディタ拡張をしたら、インスペクターからプロパティを変更した後、一度ユニティを終了して、データが保存されているか確認した方が良いと思います。目的:会話イベントを作りやすいようにしたかったとりあえず:Assetを自分でつくる。ScriptableObjectを継承したクラスはSerialize(直列化)可能になり、Unityの普通のアセットと同じようにインスペクタ―から編集できます。いうふうにAssetが作れます。コンポーネントとして作っても(MonoBehaviourを継承したクラスでも)、アセットでも(ScriptableObjectを継承したクラスでも)、画像のようにアイコンを変えることがインスペクタ―から可能です。アイコンが、こんなかんじになります。これで簡単なアセットを作れた。インスペクタ―の画面を変えるクラスを作ります。エディタ拡張するクラスはUnityEditor.Editorを継承する。クラス宣言をするときに以下の属性をつける。OnInspectorGUI(){base.OnInspectorGUI();}}作るクラス名はエディタ拡張したいクラス名+Editorにすると公式のリファレンスに書いてありました。別に書かなくても動いたけど。Editorクラスを継承したクラスはEditorフォルダ以下に置く必要があります。いう例外が発生するはずです。これに処理を書き込んでいくことで、エディタからインスペクタ―を開いた時の動作を自分で設定できます。ためしに、OnInspectorGUI()内のbase.OnInspectorGUI();を消すとインスペクタ―に何も表示されなくなります。反映されていることがわかります。ここまでは、良かったんですが、ここから先でつまりました。画面がうまく変わらなかったり、フォルダやファイルを作れなかったり。てこずったのが、ファイルがちゃんと保存されないことでした。必要になったとこだけ、書いていきます。GUIレイアウト横に並べたいとか、縦に並べたいとか、枠をつくりたいとか。テンプレートみたいなものが、Unityで用意されているのでそれについて。GUILayout.EndVertical();</span>}こんな表示になる。インプットフィールド一番、重要な部分ですが、入力するフィールドについてです。入力された値を、自分で作ったアセット(ScriptableObject)にいれる。EditorGUILayout.PropertyField(propaty);</span>serializedObject.ApplyModifiedProperties();}こんな感じですれば、勝手にフィールドが作られます。EditorGUILayout.PropertyFieldとGUILayoutの枠を作るメソッドさえ使えば大体まかなえそう。serializedObject.ApplyModifiedProperties();を最後につけとかないと、この変えた情報が他から参照するときに、反映されなかったりするかも。公式のスクリプトリファレンスも参考になります。この辺で一旦きります。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。