Unity Inspector面板上显示中文
在Unity上显示中文,可以这样搞,直接上代码
/*--------------------------------------------------------------------* Author Name: DXL* Creation Time: 2018.10.11* File Describe: Inspector面板上高级显示,例如显示中文* ------------------------------------------------------------------*/using System;
using UnityEngine;//显示中文
[AttributeUsage(AttributeTargets.Field)]
public class InspectorShow : PropertyAttribute
{public string label; //要显示的字符public InspectorShow(string label){this.label = label; }}//显示颜色
public class TitleAttribute : PropertyAttribute
{/// 标题名称 public string title;/// 标题颜色 public string htmlColor;/// 在属性上方添加一个标题 /// 标题名称/// 标题颜色public TitleAttribute(string title, string htmlColor = "#FFFFFF"){this.title = title;this.htmlColor = htmlColor;}}//显示枚举名称
[AttributeUsage(AttributeTargets.Field)]
public class EnumNameAttribute : PropertyAttribute
{/// 枚举名称 public string name;public new int[] order = new int[0];public EnumNameAttribute(string name){this.name = name;}public EnumNameAttribute(string label, params int[] order){this.name = label;this.order = order;}}
这段代码和工程中的其他代码放一起,一般情况下是放在Assets/Scripts文件夹下。
``
* Author Name: DXL* Creation Time: 2018.10.11* File Describe: 实现InspectorShow里的方法,实现Inspector面板上的高级显示* ------------------------------------------------------------------*/using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;//将属性名显示成中文
[CustomPropertyDrawer(typeof(InspectorShow))]
public class FieldLabelDrawer : PropertyDrawer
{private InspectorShow FLAttribute{get { return (InspectorShow)attribute; }获取你想要绘制的字段}public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){//在这里重新绘制EditorGUI.PropertyField(position, property, new GUIContent(FLAttribute.label), true);}
}//显示颜色
[CustomPropertyDrawer(typeof(TitleAttribute))]
public class TitleAttributeDrawer : DecoratorDrawer
{// 文本样式private GUIStyle style = new GUIStyle();public override void OnGUI(Rect position){// 获取AttributeTitleAttribute attr = (TitleAttribute)attribute;// 转换颜色Color color = htmlToColor(attr.htmlColor);// 重绘GUIposition = EditorGUI.IndentedRect(position);style.normal.textColor = color;GUI.Label(position, attr.title, style);}public override float GetHeight(){return base.GetHeight() - 4;}/// Html颜色转换为Color /// /// private Color htmlToColor(string hex){// 默认黑色if (string.IsNullOrEmpty(hex)) return Color.black;// 转换颜色hex = hex.ToLower();if (hex.IndexOf("#") == 0 && hex.Length == 7){int r = Convert.ToInt32(hex.Substring(1, 2), 16);int g = Convert.ToInt32(hex.Substring(3, 2), 16);int b = Convert.ToInt32(hex.Substring(5, 2), 16);return new Color(r / 255f, g / 255f, b / 255f);}else if (hex == "red"){return Color.red;}else if (hex == "green"){return Color.green;}else if (hex == "blue"){return Color.blue;}else if (hex == "yellow"){return Color.yellow;}else if (hex == "black"){return Color.black;}else if (hex == "white"){return Color.white;}else if (hex == "cyan"){return Color.cyan;}else if (hex == "gray"){return Color.gray;}else if (hex == "grey"){return Color.grey;}else if (hex == "magenta"){return Color.magenta;}else{return Color.black;}}}//显示中文枚举
[CustomPropertyDrawer(typeof(EnumNameAttribute))]
public class EnumNameDrawer : PropertyDrawer
{public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){// 替换属性名称EnumNameAttribute rename = (EnumNameAttribute)attribute;label.text = rename.name;// 重绘GUIbool 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);}}// 绘制枚举类型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]);EnumNameAttribute[] atts = (EnumNameAttribute[])info.GetCustomAttributes(typeof(EnumNameAttribute), false);values[i] = atts.Length == 0 ? names[i] : atts[0].name;}// 重绘GUIint index = EditorGUI.Popup(position, label.text, property.enumValueIndex, values);if (EditorGUI.EndChangeCheck() && index != -1) property.enumValueIndex = index;}}
这段代码放到编辑器文件夹下,一般是Assets/Editor下
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
