いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : 自作エディタウインドウにプレハブを擬似シリアライズ

エディタウインドウを自作したときに、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;

・参考
Unity - スクリプトリファレンス: AssetDatabase


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。