UnityでGameObjectをSerializedPropertyへ設定する
エディタ拡張を書こうとして、SerializeFieldのプロパティを更新する方法を調べたらプリミティブ型のやり方ばかりだったので、オブジェクトでのやり方を書いてみました。
調べながら書いたのでもっとスマートなやり方あったら知りたい。
実際のコード
MyObject.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyObject : MonoBehaviour {
[SerializeField]
private GameObject go;
}
MyEditor.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor (typeof(MyObject))]
public class MyEditor : Editor {
public override void OnInspectorGUI ()
{
this.serializedObject.Update();
var serializedPropertyGo = this.serializedObject.FindProperty("go");
var child = GameObject.Find("Child");
// GameObjectだからか安直にこうすれば良かった
serializedPropertyGo.objectReferenceValue = child;
// 参照するときはキャストすると良し
// var child = serializedPropertyGo.objectReferenceValue as System.Object as GameObject;
EditorGUILayout.PropertyField(serializedPropertyGo);
this.serializedObject.ApplyModifiedProperties();
}
}