如何在Unity中显示中文属性,汉化你的脚本,更方便的修改脚本属性?这里利用Editor来实现。
先上效果图:
用法:
1.在Unity中新建一个Editor文件夹
2.在Editor文件夹下新建一个RenameEditor.cs脚本,把以下代码复制到脚本里。
Editor文件夹是Unity中的特殊文件夹,可以放在任意目录下,Editor下的所有文件包括脚本都不会被打包进发布版里
using UnityEngine;
using UnityEditor;
/// <summary>
/// 重命名属性编辑器
/// <para>ZhangYu 2018-04-18</para>
/// </summary>
public class RenameEditor : Editor {
//需要重命名的键值对儿
protected string[] renameKeyValues;
protected string[] renameKeys;
protected string[] renameValues;
/// <summary> 设置需要重命名的属性和昵称 </summary>
/// <param name="keyValues">键值对儿数组</param>
/// <param name="separator">"key:value" 键值对儿分隔符</param>
protected virtual void setRenameProperties(string[] keyValues, char separator = ':') {
int length = keyValues.Length;
renameKeyValues = keyValues;
renameKeys = new string[length];
renameValues = new string[length];
for (int i = 0; i < length; i++) {
string[] array = keyValues[i].Split(separator);
renameKeys[i] = array[0];
renameValues[i] = array[1];
}
}
public override void OnInspectorGUI() {
if (renameKeyValues != null) {
//绘制新的属性名称
EditorGUI.BeginChangeCheck();
for (int i = 0; i < renameKeyValues.Length; i++) {
SerializedProperty property = serializedObject.FindProperty(renameKeys[i]);
if (property != null) EditorGUILayout.PropertyField(property, new GUIContent(renameValues[i]), true);
}
if (EditorGUI.EndChangeCheck()) serializedObject.ApplyModifiedProperties();
} else {
base.OnInspectorGUI();
}
}
}
3.在Editor文件夹下新建一个xxxEditor.cs脚本,继承自RenameEditor,并绑定你需要汉化的脚本。
举个例子:RenameTestEditor.cs
实现OnEnable()方法并调用setRenamePropetries(string[] keyValues)传入需要汉化的属性和名称
using UnityEditor;
[CustomEditor(typeof(RenameTest))]
public class RenameTestEditor : RenameEditor {
private void OnEnable() {
string[] keyValues = { "names:名称列表", "ages:年龄列表", "targets:目标列表" };
setRenameProperties(keyValues);
}
}
RenameTest.cs脚本代码:
using UnityEngine;
public class RenameTest : MonoBehaviour {
public string[] names;
public int[] ages;
public GameObject[] targets;
}
PS:转载请注明:作者 冰封百度
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。