Unity面板显示中文属性
发表于2018-04-25
虽然对于程序来说,一般习惯用英文命名,但也有为了沟通方便,在一些属性面板上会用一些中文的情况。下面就和大家介绍下两种实现中文属性名的方法。


1、使用Unity内置的HeaderAttribute
[Header("这是Header命名")] public bool testHeader;
在字段上方这样书写代码,编译成功后我们可以在Unity属性面板观察到

2、自定义Attribute
首先,我们先来说下Attribute这个东西。
.Net 框架允许创建自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。
创建并使用自定义特性包含四个步骤:
- 声明自定义特性
- 构建自定义特性
- 在目标程序元素上应用自定义特性
- 访问特性
遵循上述步骤,我们先来声明自定义特性,名为RenameAttribute:
[AttributeUsage(AttributeTargets.Field)] //指定为字段使用 public class RenameAttribute : PropertyAttribute<span style="white-space:pre;"> </span>//需要继承Unity的PropertyAttribute,以便于实现Unity的某些特性
需要注意的是,一个新的自定义特性应派生自 <span style="color:rgb(51,51,51);font-family:'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', Arial, sans-serif;font-size:13px;">System.Attribute</span><span style="color:rgb(51,51,51);font-family:'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Noto Sans CJK SC', 'WenQuanYi Micro Hei', Arial, sans-serif;font-size:13px;"> 类。</span>
然后我们来构建RenameAttribute:
我们的 RenameAttribute 类将一个用于存储中文名字的公有属性(property)。
每个特性必须至少有一个构造函数。
[AttributeUsage(AttributeTargets.Field)]<span style="white-space:pre;"> </span> public class RenameAttribute : PropertyAttribute { //用来显示中文的字符串 public string name; public RenameAttribute(string name) { this.name = name; } }
现在我们已经写好了RenameAttribute,我们的目的是显示中文属性,所以要再Inspector面板重新绘制该特性:
[CustomPropertyDrawer(typeof(RenameAttribute))] //用到RenameAttribute的地方都会被重绘 public class RenameDrawer : PropertyDrawer //相对于Editor类可以修改MonoBehaviour的外观,我们可以简单的理解PropertyDrawer为修改struct/class的外观的Editor类 { //替换属性名称 RenameAttribute rename = (RenameAttribute)attribute; label.text = rename.name; //重绘GUI EditorGUI.PropertyField(position, property, label); }
接下来我们把RenameAtrribute放在要重命名的字段前,就可以应用它了
[Header("这是Header命名")] public bool testHeader; [Rename("自定义命名")] public int test;

来自:https://blog.csdn.net/qq_17758883/article/details/79754906