Unity实现枚举类型中文显示

Unity脚本中枚举类型在inspector面板中文显示,供大家参考,具体内容如下

效果:

工具脚本:ChineseEnumTool.cs

using System;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
using System.Reflection;
using System.Text.RegularExpressions;
#endif

/// <summary>
/// 设置枚举名称
/// </summary>
#if UNITY_EDITOR
[AttributeUsage(AttributeTargets.Field)]
#endif
public class EnumAttirbute : PropertyAttribute
{
 /// <summary>
 /// 枚举名称
 /// </summary>
 public string name;
 public EnumAttirbute(string name)
 {
 this.name = name;
 }
}

#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(EnumAttirbute))]
public class EnumNameDrawer : PropertyDrawer
{
 public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
 {
 // 替换属性名称
 EnumAttirbute enumAttirbute = (EnumAttirbute)attribute;
 label.text = enumAttirbute.name;

 bool isElement = Regex.IsMatch(property.displayName, "Element \\d+");
 if (isElement)
 {
  label.text = property.displayName;
 }

 if (property.propertyType == SerializedPropertyType.Enum)
 {
  DrawEnum(position, property, label);
 }
 else
 {
  EditorGUI.PropertyField(position, property, label, true);
 }
 }

 /// <summary>
 /// 重新绘制枚举类型属性
 /// </summary>
 /// <param name="position"></param>
 /// <param name="property"></param>
 /// <param name="label"></param>
 private void DrawEnum(Rect position, SerializedProperty property, GUIContent label)
 {
 EditorGUI.BeginChangeCheck();
 Type type = fieldInfo.FieldType;

 string[] names = property.enumNames;
 string[] values = new string[names.Length];
 while (type.IsArray)
 {
  type = type.GetElementType();
 }

 for (int i = 0; i < names.Length; ++i)
 {
  FieldInfo info = type.GetField(names[i]);
  EnumAttirbute[] enumAttributes = (EnumAttirbute[])info.GetCustomAttributes(typeof(EnumAttirbute), false);
  values[i] = enumAttributes.Length == 0 ? names[i] : enumAttributes[0].name;
 }

 int index = EditorGUI.Popup(position, label.text, property.enumValueIndex, values);
 if (EditorGUI.EndChangeCheck() && index != -1)
 {
  property.enumValueIndex = index;
 }
 }
}
#endif

public class ChineseEnumTool : MonoBehaviour {
}

新建Text脚本测试

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//定义动物类
public enum Animal
{
 [EnumAttirbute("小狗")]
 dog,
 [EnumAttirbute("小猫")]
 cat,
 [EnumAttirbute("老虎")]
 tiger
}
public class Test : MonoBehaviour {

 [EnumAttirbute("动物")]
 public Animal animal;

 void Start () {

 }

 void Update () {

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 关于c#中枚举类型支持显示中文的扩展说明

    复制代码 代码如下: AuditEnum.cs : public enum AuditEnum{ Holding=0,     Auditing=1, Pass=2, Reject=3      } 以asp.net为例 , 程序中某个方法可能会这样使用枚举值 :public void HandleAudit(int userID, AuditEnum ae){ if (ae==AuditEnum.Pass) { //do something } else if (ae==AuditEnum.R

  • C#如何给枚举类型增加一个描述特性详解

    前言 相信很多人对枚举并不陌生,枚举可以很方便和直观的管理一组特定值.如果我们在页面上直接输出我们希望匹配的汉语意思或则其他满足我们需求的语句就更好了,当然,通常小伙伴们都会再页面上if(enum==1) "我是一个枚举"或者switch(enum)这种方式解决. 枚举的优点: <1>枚举可以使代码更易于维护,有助于确保给变量指定合法的.期望的值. <2>枚举使代码更清晰,允许用描述性的名称表示整数值,而不是用含义模糊的数来表示. <3>枚举使代码更

  • Unity实现枚举类型中文显示

    Unity脚本中枚举类型在inspector面板中文显示,供大家参考,具体内容如下 效果: 工具脚本:ChineseEnumTool.cs using System; using UnityEngine; #if UNITY_EDITOR using UnityEditor; using System.Reflection; using System.Text.RegularExpressions; #endif /// <summary> /// 设置枚举名称 /// </summar

  • C#中的枚举类型(Enum)介绍

    枚举(Enum)定义 enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型.通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它.但是,还可以将枚举嵌套在类或结构中.现在的有些电商网站根据购物的积分用到的,金牌会员,银牌会员,铜牌会员. enum MemberLevel { gold, silver, copper } 枚举值获取 一般获取的时候包括获取变量和变量值,默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1

  • Eclipse XSD 生成枚举类型的Schema的实例详解

    Eclipse XSD 生成枚举类型的Schema的实例详解 前言: 因为网上关于Eclipse XSD的中文资料比较少,而且关于Eclipse XSD的范例代码也凤毛麟角,但是有的时候我们需要生成一个带枚举限定的简单类型的XSD Schema,比如下面的格式, <?xml version="1.0" encoding="UTF-8"?><schema xmlns="http://www.w3.org/2001/XMLSchema&quo

  • C#中可枚举类型详解

    枚举是迭代一个集合中的数据项的过程. 我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键和值..........其实他们都已经实现了IEnumerable和IEnumerator接口.所以一切的集合和数组都可以用IEnumerable或者IEnumerable<T>接口来定义. IEnumerabl

  • C#语言基础——结构体和枚举类型全面解析

    一.结构体(struct) 结构类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明含有成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,其实就是一个自定义

  • Java的枚举类型使用方法详解

    1.背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用public final static 方法定义的代码如下,分别用1 表示春天,2表示夏天,3表示秋天,4表示冬天. public class Season { public static final int SPRING = 1; public static final int SUMMER = 2; public static final int AUTUMN = 3; publ

  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法

    本文较为详细的讲述了在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法,分享给大家供大家参考之用.具体方法如下: 在我们开发基于WCF访问方式的Winform程序的时候,一般情况下需要对界面显示的字段进行中文显示的解析.如果是硬编码进行中文显示,那么除了不方便调整及代码臃肿外,性能上没有什么问题,但是不建议这样处理:一般情况下,我们把中文对照信息放到业务类里面去统一解析,但是这样会导致每次WCF访问方式请求解析中文化的操作耗费一定的响应时间.如果使用缓存存储中文字段的对照表,那么

  • Vue使用枚举类型实现HTML下拉框步骤详解

    下拉框包含option中的Value和用来显示的选项, 一般后台都是使用的Value值,而不是显示在前台的选项 第一步: 编写下拉框需要的枚举类型 StatusEnum.java public enum StatusEnum { RED, YELLOW, GREEN } 第二步: 编写用来存放下拉框中对应的option中的Value和显示的选项 StatusDTO.java public class StatusDTO { private String code; private String

  • 浅析对java枚举类型的认识

    而想弄明白枚举类型是什么,就要把他和类进行对比了.用ecplise创建一个类,你要使用这个类就得new一个对象出来对吧(当然了,别较真,说我用他的静态属性和方法):而当你用ecplise创建一个枚举类型时,在使用时是不需要再new的,它本身就创建好了几个对象在其内部,这也就是枚举和类的最大区别. 首先,先创建一个枚举,看一下它到底是什么东西. 我们给这个枚举对象加入两个对象(red和green),一个属性,一个构造方法,还有setget方法,这样一个简单的枚举类型就创建好了. 说说枚举的用处:一

随机推荐