在下不才,英语不太行,写代码时候又不得不用Unity编辑器里的组件(英语),比如camera,transform等等。因此突发奇想,想扩展编辑器达到一键修改编辑器语言,查看组件中的信息,然后再改回英语(主要是不想打开Edit/Preferences/language中打开修改)
以下奉上代码:
using System.Reflection;//反射所需命名空间
using UnityEditor;//导入Unity编辑器的命名空间
using UnityEngine;//系统语言所需要的命名空间
public class Custom_Menu
{
[MenuItem("Tool/ChangeLanguage",false)]//扩展编辑器的菜单栏
public static void ChangeLanguage()
{
var menuPath = "Tool/ChangeLanguage";
bool mChecked = Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, !mChecked);
//开始执行反射
Assembly assembly = Assembly.Load("UnityEditor");//加载命名空间
Type type = assembly.GetType("UnityEditor.EditorGUIUtility");//获取类名
MethodInfo mInfo= type.GetMethod("NotifyLanguageChanged", BindingFlags.Static | BindingFlags.NonPublic);//获取方法体,因为方法体是static和internal所修饰
if (mChecked)
{
object[] parameters = new object[] { SystemLanguage.Chinese };//添加参数(中文)
mInfo.Invoke(null, parameters);//执行方法,传入参数
UnityEditorInternal.InternalEditorUtility.RequestScriptReload();
//Debug.Log("mChecked为" + mChecked);
}
else
{
object[] parameters = new object[] { SystemLanguage.English};
mInfo.Invoke(null, parameters);
UnityEditorInternal.InternalEditorUtility.RequestScriptReload();
}
}
}
最后,能修改成功了。为以后的开发做好准备