- serializedObject.FindProperty()访问私有数据。使用SerializedObject和SerializedProperty来获取私有数据,只需传入数据的名称即可。
![](https://i-blog.csdnimg.cn/direct/4e612e6f87384e009cf24619bc836596.png)
- serializedObject只能在Editor中使用,它专门用于获取设置的序列化信息。
- 通常要开发复杂的编辑组件,都需要重写OnInspectorGUI()方法,但是如果希望有些用原生的绘制结构,同时兼容一些自定义渲染的话,可以用它来实现组合兼容绘制。
- 使用EditorGUILayout.PropertyField()方法即可使用Unity原生方法绘制某对象,其余则使用自定义绘制方法。
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class Test2 : MonoBehaviour
{
[SerializeField]
private int id;
[SerializeField]
private GameObject[] targets;
}
#if UNITY_EDITOR
[CustomEditor(typeof(Test2))]
public class ScriptInsector:Editor
{
public override void OnInspectorGUI ()
{
//更新最新数据
serializedObject.Update ();
//获取数据信息
SerializedProperty property = serializedObject.FindProperty ("id");
//赋值数据
property.intValue = EditorGUILayout.IntField ("主键", property.intValue);
//以默认样式绘制数组数据
EditorGUILayout.PropertyField(serializedObject.FindProperty ("targets"), true);
//全部保存数据
serializedObject.ApplyModifiedProperties ();
}
}
#endif
![](https://i-blog.csdnimg.cn/direct/a446ad8fda4e4c5eaefd24c26ebe02eb.png)