c# - 可序列化类未显示在自定义检查器中
问题描述
我正在统一为我的 ScriptableObjects 创建自定义检查器,我注意到我的 Serializable 类的属性没有显示
我创建了一个简单的脚本来保存字符数据,其中一个字段是 Serializable 类。如果我不使用自定义检查器,我可以在检查器中看到该类,但如果我尝试创建一个,它只会在折叠视图中自动显示字段名称,当我展开它时,它是空的。
我的课:
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();
}
}
最后是我的自定义编辑器:
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();
}
}
}
我想在自定义检查器中查看我的技能类的属性
解决方案
这个对我有用
我的课:
[Serializable]
public class Skills
{
[SerializeField]
public byte[] m_Arr;
}
我的数据脚本对象:
[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”的文件夹中
推荐阅读
- c++ - How to transfer half of the array to another array with different size?
- kubernetes - Linkerd 控制平面吊舱不会出现在 EKS 上
- apache-spark - 来自 Spark 安装的 Pyspark VS Pyspark python 包
- tfs - TFS (Azure DevOps) On prem upgrade 2018 to 2019 问题
- mysql - Mysql:如何在 created_at 位置后 2 个月检索行
- laravel - 我想显示每个类别的所有帖子
- java - Regex to Mask all but Last Two Digits of a Number of Specific Length
- swift - 在 macOS Catalina 中拖放磁盘
- docker - Dockerfile 入口点似乎是追加而不是覆盖
- c - 如何对齐阵列以相互适应?