Сериализуемый класс не отображается в пользовательском инспекторе - PullRequest
0 голосов
/ 23 января 2019

Я создаю пользовательский инспектор для моих объектов ScriptableObject в единстве, и я заметил, что свойства моего сериализуемого класса не отображаются

Я создал простой скрипт для хранения символьных данных, и одно из его полейявляется сериализуемым классом.Если я не использую пользовательский инспектор, я вижу класс в инспекторе, но если я пытаюсь создать его, он автоматически просто отображает имя поля в виде раскладывания, а когда я его раскрываю, он пуст.

Мой класс:

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

}

Мои данные ScriptableObject:

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();
    }
}

И, наконец, мой пользовательский редактор:

using UnityEditor;
namespace Characters.CustomEditors
{
    [CustomEditor(typeof(ScriptableObjects.SoldierData))]
    public class SoldierEditor : CharacterEditor
    {
        private SerializedProperty life, autoAttack, skills, weapon;
        private bool showBaseProperties = true, showWeaponProperties = false;

        private new void OnEnable()
        {
            base.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();
            }
        }
    }

Я хочу видеть свойства своего класса навыков втаможенный инспектор

1 Ответ

0 голосов
/ 23 января 2019

Это работает для меня

Мой класс:

[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 в папку с именем «Редактор»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...