
これを作る。
前回作成したCSVファイルからデータベースにデータを追加するスクリプトにボタンを追加する。
前回のものはこちら
前回のあらすじ
CSVを読み込んでデータベース(ScriptableObject)に追加するスクリプトを作成した
けど、実行するにはゲームを再生してStart()関数を呼ばないといけない作り。
できればゲームを再生せずに上記を実行したい。
解決策
Inspectorにボタンを追加しよう
Inspectorにボタンを追加する
Inspectorにボタンを追加するには、Editorクラスを継承した拡張クラスを用意する必要がある。
MonoBehaviourを継承しているとEditorを継承できない(C#は多重継承禁止)ので、別スクリプトを作成することになる。
前回作った「CsvImportTool.cs」と同じ階層に、拡張用クラス「CsvImportEditor.cs」を作成する

CsvImportEditor.cs
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(CsvImportTool))] // CsvImportToolを拡張する
public class CsvImportEditor : Editor
{
public override void OnInspectorGUI()
{
//元のInspector部分を表示
base.OnInspectorGUI();
//ボタンを表示
if (GUILayout.Button("苗字データのcsvをインポート"))
{
CsvImportTool csvImportTool = (CsvImportTool)target;
csvImportTool.SetLastNameDataBaseFromCsv();
}
//ボタンを表示
if (GUILayout.Button("名前データのcsvをインポート"))
{
CsvImportTool csvImportTool = (CsvImportTool)target;
csvImportTool.SetFirstNameDataBaseFromCsv();
}
}
}
追加するのはこれだけ。
[CustomEditor(typeof(CsvImportTool))]
にて拡張するクラスを指定する。
今回は以前作成したCsvImportToolクラスを拡張するのでこの書き方。
public class CsvImportEditor : Editor
Editorクラスを継承
public override void OnInspectorGUI()
EditorクラスのOnInspectorGUI()関数をオーバーライドしてる。
正直「これはこういうもん」って覚えておくのが良さそう
base.OnInspectorGUI();
これは拡張元クラスのInspector表示を引き継ぐようにする処理。
これがないと下図のように元クラスでInspector表示できていたものが表示されなくなってしまう。

//ボタンを表示
if (GUILayout.Button("苗字データのcsvをインポート"))
{
CsvImportTool csvImportTool = (CsvImportTool)target;
csvImportTool.SetLastNameDataBaseFromCsv();
}
//ボタンを表示
if (GUILayout.Button("名前データのcsvをインポート"))
{
CsvImportTool csvImportTool = (CsvImportTool)target;
csvImportTool.SetFirstNameDataBaseFromCsv();
}
本命のボタンを追加する処理。
GUILayout.Button(“〇〇”)でInspectorにボタンを表示させてるっぽい
押したときにTrueが返って中の処理が実行されるような感じ
〇〇はボタンに表示させるテキストになる。
あとは実行させたい関数をそれぞれのif内に書いてあげればよい。
追記(2023/12/26)
同じスクリプトファイルに書いても普通に動作した。
こっちのほうがわかりやすい気がする
using UnityEngine;
using UnityEditor;
public class CsvImportTool : MonoBehaviour
{
// ほにゃほにゃ
}
[CustomEditor(typeof(CsvImportTool))] // CsvImportToolを拡張する
public class CsvImportEditor : Editor
{
public override void OnInspectorGUI()
{
// ほにゃほにゃ
}
}