エディタウインドウを自作したときに、EditorGUILayout.ObjectField で受けたプレハブ情報を保存しておく場合の方法。
EditorWindowを継承してエディタを自作した場合、データの保存には EditorPrefs を使う。
Unity - スクリプトリファレンス: EditorPrefs
が、Object型データを保存できないので、プレハブなどの情報を保存しておきたい場合、ちょっと一工夫する必要がある。
Object情報をエディタで受ける
まず EditorWindow の OnGUI 関数で以下のように書くことで、プレハブなどをインスペクタから設定できるようになる。
prefab = EditorGUILayout.ObjectField( "prefab", prefab, typeof(GameObject), false) as GameObject; // 変数 prefab は GameObject型のメンバ変数
プレハブ情報を保存する
Object情報を直接保存することはできないので、プレハブが持つ一意なIDである GUID を保存することで、プレハブ情報を復元できる。
そこで、ObjectField で GameObject 型のプレハブを受け取ったら、AssetDatabase.GetAssetPath でプレハブのパスを取得し、そこからGUIDを取得してEditorPrefに文字列として保存する。
string path = AssetDatabase.GetAssetPath(prefab); string guid = AssetDatabase.AssetPathToGUID(path); EditorPrefs.SetString("prefab_asset", guid);
プレハブ情報を復元する
保存と逆をすればよい。
string guid = EditorPrefs.GetString("prefab_asset"); string assetPath = AssetDatabase.GUIDToAssetPath(guid); GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath) as GameObject;