前言:
在Unity中编辑属性的适合,一般都是显示属性的英文,如果想要改成中文的话又不能改变属性名,那么自定义特性是很好的选择。
一、自定以特性
这一块没有什么要多说的,就是自定义特性
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endifpublic class FieldNameAttribute : PropertyAttribute
{internal string Name { get; private set; }public FieldNameAttribute(string name){Name = name;}
}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(FieldNameAttribute))]
public class FieldNameAttributeDrawer : PropertyDrawer
{public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){EditorGUI.PropertyField(position, property, new GUIContent((attribute as FieldNameAttribute).Name), property.hasChildren);}
}
#endif
二、布局问题
这样写其实以及完成了效果,如图:
问题一目了然是吧,虽然定义了属性,但我们没有处理其可见子元素的布局
我们只要重写PropertyDrawer中的GetPropertyHeight函数即可
public class FieldNameAttributeDrawer : PropertyDrawer
{public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){EditorGUI.PropertyField(position, property, new GUIContent((attribute as FieldNameAttribute).Name), property.hasChildren);}public override float GetPropertyHeight(SerializedProperty property, GUIContent label){float baseHeight = base.GetPropertyHeight(property, label);if (property.isExpanded){if (property.propertyType == SerializedPropertyType.Generic){return baseHeight + EditorGUIUtility.singleLineHeight * property.CountInProperty();}}return baseHeight;}}
如图: