调用其他Editor类方法时serializedObject.FindProperty返回null如何解决
根因
- 你定义的
EditorSerializaion继承自Editor类,父类Editor自带的serializedObject属性是Unity自动为绑定了 inspected 目标对象的Editor实例初始化的。你在BaiscComponentEditor中只是声明了EditorSerializaion类型的字段,没有做任何初始化绑定操作,这个实例的serializedObject是空值,自然找不到对应属性。 - 你直接在自定义Editor类中调用可以成功,是因为Unity已经自动为
BaiscComponentEditor实例绑定了当前选中的BasicComponentScript对象,它的serializedObject是有效的。
修复方案
这里提供两种可行的修改方式,优先选择第一种更轻量易维护:
方案1:改造成通用序列化工具类(无继承)
不需要让EditorSerializaion继承Editor,调用时把当前Editor的有效serializedObject作为参数传入即可,代码修改如下:
// 改造后的工具类 public static class EditorSerializationUtil { public static void DrawSerializedField(SerializedObject serializedObject, string name, string title) { SerializedProperty property = serializedObject.FindProperty(name); // 增加非空判断避免属性名错误时报错 if (property != null) { EditorGUILayout.PropertyField(property, new GUIContent(title)); serializedObject.ApplyModifiedProperties(); } } } // 自定义Editor调用方式 [CustomEditor(typeof(BasicComponentScript))] public class BaiscComponentEditor : Editor { public override void OnInspectorGUI() { // 直接传入当前Editor的有效serializedObject EditorSerializationUtil.DrawSerializedField(serializedObject, "pos", "Position"); } }
方案2:保留Editor继承,手动初始化绑定
如果一定要保留EditorSerializaion的Editor继承关系,需要在自定义Editor的OnEnable生命周期里手动创建绑定了当前目标对象的实例:
// 原EditorSerializaion逻辑不需要修改 public class EditorSerializaion : Editor { public void DrawSerializedField(string name, string title) { SerializedProperty property = serializedObject.FindProperty(name); EditorGUILayout.PropertyField(property, new GUIContent(title)); serializedObject.ApplyModifiedProperties(); } } // 自定义Editor补充初始化逻辑 [CustomEditor(typeof(BasicComponentScript))] public class BaiscComponentEditor : Editor { EditorSerializaion editorSerializaion; private void OnEnable() { // 为当前目标对象创建绑定好serializedObject的EditorSerializaion实例 editorSerializaion = (EditorSerializaion)CreateEditor(target, typeof(EditorSerializaion)); } public override void OnInspectorGUI() { editorSerializaion.DrawSerializedField("pos", "Position"); } }
内容的提问来源于stack exchange,提问作者amitklein
相关产品推荐
相关产品推荐

