Unity
Unity拡張

UnityでGameObjectをSerializedPropertyへ設定する


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();
}
}