Unity面板显示中文属性

虽然对于程序来说,一般习惯用英文命名,但有时身在公司,总是需要和策划协作的,他们可能看不懂一些英文变量,所以为了方便交流,我抽空研究了下Unity属性面板中文化的问题。

有两种方法可以实现中文属性名:

1.使用Unity内置的HeaderAttribute

[Header("这是Header命名")]
public bool testHeader;

在字段上方这样书写代码,编译成功后我们可以在Unity属性面板观察到

2.自定义Attribute
首先,我们先来说下Attribute这个东西。

.Net 框架允许创建自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。

创建并使用自定义特性包含四个步骤:

  • A.声明自定义特性
  • B.构建自定义特性
  • C.在目标程序元素上应用自定义特性
  • D.访问特性

遵循上述步骤,我们先来声明自定义特性,名为RenameAttribute:
[AttributeUsage(AttributeTargets.Field)]	//指定为字段使用
public class RenameAttribute : PropertyAttribute	//需要继承Unity的PropertyAttribute,以便于实现Unity的某些特性
需要注意的是,一个新的自定义特性应派生自 System.Attribute 类。
然后我们来构建RenameAttribute:

我们的 RenameAttribute 类将一个用于存储中文名字的公有属性(property)。

每个特性必须至少有一个构造函数。

[AttributeUsage(AttributeTargets.Field)]	
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类
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        //替换属性名称
        RenameAttribute rename = (RenameAttribute)attribute;
        label.text = rename.name;

        //重绘GUI
        EditorGUI.PropertyField(position, property, label);
    }

}
接下来我们把RenameAtrribute放在要重命名的字段前,就可以应用它了
 
[Header("这是Header命名")]
public bool testHeader;
[Rename("自定义命名")]
public int test;

 

大功告成!
 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值