
在本教程中,3D天堂将介绍如何在Unity编辑器中创建自定义的编辑器窗口,就像Unity中的其他内置编辑器窗口一样,可以自由的摆放撕下,当然你也可以创建其他的自定义编辑器窗口,可以为这些窗口提供自定义的用户界面。
创建自定义编辑器窗口的步骤
- 创建建脚本,通过目标菜单资产 → 创建 → C#脚本,示例脚本如下所示。
- 该脚本必须继承自EditorWindow类。
- ShowWindow()方法将允许它显示在编辑器中,MenuItem属性提供窗口的路径或层次结构。
using UnityEditor;
public class MyCustomWindow : EditorWindow
{
// provide the menu/menu item
// This will add My Custom Window menu item in Window Menu
[MenuItem("Window/i3dtt Custom Menu")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(MyCustomWindow));
}
}
现在可以在编辑器中看到菜单项。

这里也可以提供菜单名称,如下所示。
[MenuItem("3D/i3dtt Custom Menu")]
这将显示如下名称。

现在创建自定义窗口,打开它并使用任何其他窗口调整其在UI中的位置。

现在将为编辑器窗口添加GUI代码。
using UnityEditor;
using UnityEngine;
public class MyCustomWindow : EditorWindow
{
float scale = 1.0f;
// provide the menu/menu item
// This will add My Custom Window menu item in Window Menu
[MenuItem("Window/i3dtt Custom Menu")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(MyCustomWindow));
}
private void OnGUI()
{
//Label
var style = new GUIStyle(GUI.skin.label);
style.alignment = TextAnchor.MiddleCenter;
style.fontStyle = FontStyle.Bold;
EditorGUILayout.LabelField("i3dtt Customize Objects", style, GUILayout.ExpandWidth(true));
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Scale: ");
scale = EditorGUILayout.FloatField(scale);
GUILayout.EndHorizontal();
if(GUILayout.Button("Apply"))
{
foreach (GameObject obj in Selection.gameObjects)
{
obj.transform.localScale = new Vector3(scale, scale, scale);
}
}
}
}
现在设置已经完成。
接下来可以测试上面的脚本,无需运行Unity项目来测试编辑器脚本。

注意:
在Assets目录下创建Editor文件夹,并将所有编辑器脚本放在该文件夹中,但此步骤是可选的,editor文件夹的优点是其中的脚本不会包含在构建中,可以在不同位置的资产目录中创建多个编辑器文件夹。
…
以上是3D天堂关于在Unity中自定义编辑器窗口和菜单的全部内容,如果你有任何反馈,请随时在本页面下方留言。