代码先锋网 代码片段及技术文章聚合

Unity面板显示中文属性

技术标签: c#  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类
{
        //替换属性名称
        RenameAttribute rename = (RenameAttribute)attribute;
        label.text = rename.name;
        //重绘GUI
        EditorGUI.PropertyField(position, property, label);
}
接下来我们把RenameAtrribute放在要重命名的字段前,就可以应用它了

[Header("这是Header命名")]
public bool testHeader;
[Rename("自定义命名")]
public int test;



大功告成!

版权声明:本文为qq_17758883原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_17758883/article/details/79754906

智能推荐

Unity在Inspecter面板中显示事件

    如果要在自定义Editor中显示...

【Unity编辑器扩展】中文显示Inspector面板的变量,代码内仍是英文变量名

一、效果图 测试代码也是很简单就是添加了几个变量 这里的 SerializeField 特性主要是在Inspector面板显示private 的变量 在代码中照样是用name,age,address,time这几个变量。 二、脚本内变量 三、编辑器脚本...

CocosCreator脚本属性在属性面板的显示

声明属性 要声明属性,需要在 cc.Class 定义的 properties 字段中,填写属性名字和属性参数。 下拉列表 要在属性检查器上显示为下拉列表的样式,需设置属性类型为枚举,并设置默认值为枚举值。为了设置为枚举,需定义一个枚举类型,可以使用Cocos提供的cc.Enum定义枚举。 效果如图所示: 要想定义中文的下拉选项文字,必须使用cc.Enum。 动态设置属性的可见性 要想选择不同的下拉...

UnityShader属性在属性面板的控制显示

UnityShader属性面板的控制参数 [HideInInspector] 在显示面板隐藏属性 [NoScaleOffset] 材质面板不显示UV偏移 [Normal] 表明贴图为法线贴图 [HDR] 表示贴图是HDR贴图 [Gamma] 表示float/vector变量在UI里为sRGB [PerRendererData] 表示贴图的属性来自MaterialPropertyBlock 演示 _...

猜你喜欢

unity Inspector属性面板 组件启用与关闭

https://docs.unity3d.com/ScriptReference/GameObject-activeSelf.html https://docs.unity3d.com/ScriptReference/GameObject.SetActive.html...

Unity 之 Inspector面板下的Transform属性变了

Unity 之 Inspector面板下的Transform属性变了 打开Unity随便一个游戏体的Inspector面板变成了下图: 一开始我以为是打开了Debug模式,但并非我所想的那样,还是Normal模式; 几经周折,最后发现是因为导入的一个模型带入了一个自定义的Transform的脚本,也就是下面这个句代码: CustomEditor: 官方地址API 把这个"[CustomE...

unity的public在属性面板修改的实时性

unity的公共变量是会出现在属性面板的。今发现,面板中对公共变量的改动会是实时的改动。好深奥的说法,是不是没有理解。好吧,来个例子就明白了。 例如场景中放一个cube,进行两个测试,一个是改变整个cube的颜色,另一个就是写一个字符串。过一会这两个都要在属性面板进行。 写上一段代码并且绑定到cube上。代码如下: 绑定好之后看看我们的属性面板,如下图: 运行之后,颜色会是蓝色,这也正是我们定义的...

Unity的Inspector面板显示自建类和事件

Unity的Inspector面板显示自建类和事件 代码 效果 代码 话不多说,直接上代码。 效果 其中UnityEvent是Unity一个封装的事件类。上面的方式,是我知道的Unity唯一可以将事件显示在Inspector面板上的方式。 以及自建的一个类可以在Inspector面板上的显示方法。...