首页 > 解决方案 > 使用另一个类的 serializedObject

问题描述

我做了一个基础课

public class EditorSerializaion : Editor
    {
        public void DrawSerializedField(string name, string title)
        {
            SerializedProperty property;
            property = serializedObject.FindProperty(name);
            EditorGUILayout.PropertyField(property, new GUIContent(title));
            serializedObject.ApplyModifiedProperties();
        }
    }

我想从自定义编辑器类中调用它

[CustomEditor(typeof(BasicComponentScript))]
public class BaiscComponentEditor : Editor
{
    EditorSerializaion editorSerializaion;

    public override void OnInspectorGUI()
    {
        editorSerializaion.DrawSerializedField("pos", "Posotion");
    }
}

但它不起作用(在DrawSerializedField函数中serializedObject.FindProperty(name)返回null但我在自定义检查器中使用相同的名称执行它)

标签: c#unity3deditorunity-editor

解决方案


您可以将 serializedObject 作为参数传递给 DrawSerializedField。而且我认为从 Editor 扩展 EditorSerialization 对您的情况没有任何好处(如您所见,您不能自动访问其他 Editor 脚本的 serializedObjects)。如果我是你,我会把它变成一个静态实用程序类:

  • public static void DrawSerializedField(SerializedObject serializedObject, string name, string title)
  • EditorSerializaion.DrawSerializedField(serializedObject, "pos", "Position");

推荐阅读