可序列化的类未在自定义检查器中显示

时间:2019-01-23 19:03:55

标签: c# class unity3d serialization editor

我正在为我的ScriptableObjects统一创建自定义检查器,并且我注意到我的Serializable类的属性未显示

我创建了一个简单的脚本来保存字符数据,其中一个字段是Serializable类。如果我不使用自定义检查器,则可以在检查器中看到该类,但是如果我尝试创建一个类,它会自动在折叠视图中显示字段名称,而当我展开它时,该字段为空。

我的课:

                app.UseForwardedHeaders(new ForwardedHeadersOptions
                {
                    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
                });

我的数据ScriptableObject:

using UnityEngine;
[System.Serializable]
public class Skills
{
    [SerializeField, Tooltip("This character agility level")]
    private byte agility, strength;

}

最后是我的自定义编辑器:

using UnityEngine;
using Weapons.ScriptableObjects;
namespace Characters.ScriptableObjects
{
     [CreateAssetMenu(fileName = "New Character", menuName 
"Characters/Soldier")]
    public class SoldierData : CharacterData
    {
        public Weapon weapon;
        public float life = 100;
        public bool autoAttack = true;
        public Skills skills = new Skills();
    }
}

我想在自定义检查器中查看我的Skills类的属性

1 个答案:

答案 0 :(得分:0)

对我有用

我的课:

[Serializable]
public class Skills
{
    [SerializeField]
    public byte[] m_Arr;
}

我的数据ScriptableObject:

[CreateAssetMenu(fileName = "New Character", menuName =
"Characters/Soldier")]
public class SoldierData : ScriptableObject
{
    //public Weapon weapon;
    public float life = 100;
    public bool autoAttack = true;
    public Skills skills = new Skills();
}

最后是我的自定义编辑器:

[CustomEditor(typeof(SoldierData))]
public class SoldierEditor : Editor
{
    private SerializedProperty life, autoAttack, skills/*, weapon*/;
    private bool showBaseProperties = true, showWeaponProperties = false;

    private void OnEnable()
    {
        life = serializedObject.FindProperty("life");
        autoAttack = serializedObject.FindProperty("autoAttack");
        skills = serializedObject.FindProperty("skills");
        //weapon = serializedObject.FindProperty("weapon");
    }
    public override void OnInspectorGUI()
    {
        showBaseProperties = EditorGUILayout.Foldout(showBaseProperties, "Basic settings:");
        if (showBaseProperties)
        {
            base.OnInspectorGUI();
        }
        serializedObject.Update();
        showWeaponProperties = EditorGUILayout.Foldout(showWeaponProperties, "Weapon settings");
        if (showWeaponProperties)
        {
            EditorGUILayout.PropertyField(autoAttack);
            EditorGUILayout.PropertyField(life);
        }
        EditorGUILayout.PropertyField(skills);
        serializedObject.ApplyModifiedProperties();
    }
}

取消注释武器 添加:将SoldierEditor放在名为“ Editor”的文件夹中