SerializedObject

  •         serializedObject.FindProperty()访问私有数据。使用SerializedObject和SerializedProperty来获取私有数据,只需传入数据的名称即可。

  • 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

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArgumentNullException: Value cannot be null. Parameter name: _unity_self UnityEditor.SerializedObject.FindProperty (System.String propertyPath) (at <505360e321ae48e3804e227a34262e1e>:0) UnityEditor.UIElements.Bindings.SerializedObjectBindingContext.BindPropertyRelative (UnityEngine.UIElements.IBindable field, UnityEditor.SerializedProperty parentProperty) (at <dfb6114cbc8f47d49a0a812a5562a1f9>:0) UnityEditor.UIElements.Bindings.SerializedObjectBindingContext.BindTree (UnityEngine.UIElements.VisualElement element, UnityEditor.SerializedProperty parentProperty) (at <dfb6114cbc8f47d49a0a812a5562a1f9>:0) UnityEditor.UIElements.Bindings.SerializedObjectBindingContext.ContinueBinding (UnityEngine.UIElements.VisualElement element, UnityEditor.SerializedProperty parentProperty) (at <dfb6114cbc8f47d49a0a812a5562a1f9>:0) UnityEditor.UIElements.Bindings.DefaultSerializedObjectBindingImplementation+BindingRequest.Bind (UnityEngine.UIElements.VisualElement element) (at <dfb6114cbc8f47d49a0a812a5562a1f9>:0) UnityEngine.UIElements.VisualTreeBindingsUpdater.Update () (at <d46c07da13f941aeb9b5f49c78214485>:0) UnityEngine.UIElements.VisualTreeUpdater.UpdateVisualTreePhase (UnityEngine.UIElements.VisualTreeUpdatePhase phase) (at <d46c07da13f941aeb9b5f49c78214485>:0) UnityEngine.UIElements.Panel.UpdateBindings () (at <d46c07da13f941aeb9b5f49c78214485>:0) UnityEngine.UIElements.UIElementsUtility.UnityEngine.UIElements.IUIElementsUtility.UpdateSchedulers () (at <d46c07da13f941aeb9b5f49c78214485>:0) UnityEngine.UIElements.UIEventRegistration.UpdateSchedulers () (at <d46c07da13f941aeb9b5f49c78214485>:0) UnityEditor.RetainedMode.UpdateSchedulers () (at <dfb6114cbc8f47d49a0a812a5562a1f9>:0)
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值