zoukankan      html  css  js  c++  java
  • unity, SerializedObject.FindProperty不要写在Editor的OnEnable里,要写在OnInspectorGUI里

    如果像下面这样写:

    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    using System.Collections.Generic;
    using UnityEngine.Assertions.Must;
    [CustomEditor(typeof(xxxControl))]
    public class xxxControlEditor : Editor
    {
        SerializedProperty m_a;
        void OnEnable(){

        m_a=serializedObject.FindProperty ("m_a");
        }
        public override void OnInspectorGUI()
        {

         /////DrawDefaultInspector();

            serializedObject.Update ();
            EditorGUILayout.PropertyField(m_a,true);
            serializedObject.ApplyModifiedProperties ();
        }

    }

    则在其它Editor或EditorWindow脚本的中调用

        Editor _editor=Editor.CreateEditor(xxxObj.GetComponent<xxxControl>());

    就会报如下错误:

    NullReferenceException: (null)
    UnityEditor.SerializedObject..ctor (UnityEngine.Object[] objs) (at C:/buildslave/unity/build/artifacts/generated/common/editor/SerializedPropertyBindings.gen.cs:72)
    UnityEditor.Editor.GetSerializedObjectInternal () (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:151)
    UnityEditor.Editor.get_serializedObject () (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:144)
    xxxControlEditor.OnEnable () (at Assets/??/Editor/xxxControlEditor.cs:??)

    如果将SerializedObject.FindProperty从OnEnable中改到OnInspectorGUI中,即:

    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    using System.Collections.Generic;
    using UnityEngine.Assertions.Must;
    [CustomEditor(typeof(xxxControl))]
    public class xxxControlEditor : Editor
    {
        SerializedProperty m_a;
        void OnEnable(){
        }
        public override void OnInspectorGUI()
        {

         /////DrawDefaultInspector();

        m_a=serializedObject.FindProperty ("m_a");//serializedObject.FindProperty should be called in OnInspectorGUI() instead of OnEnable()

            serializedObject.Update ();
            EditorGUILayout.PropertyField(m_a,true);
            serializedObject.ApplyModifiedProperties ();
        }

    }

    则不会出现上述错误。

  • 相关阅读:
    仿照Excel的控件,支持c#
    Excel地图插件
    com接口调用
    决策树算法
    python练习题
    numpy练习题
    机器学习_线性回归
    python学习之老男孩python全栈第九期_数据库day005知识点总结 —— MySQL数据库day5
    problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构 -- 队列
    python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4
  • 原文地址:https://www.cnblogs.com/wantnon/p/5486191.html
Copyright © 2011-2022 走看看