📅  最后修改于: 2023-12-03 15:35:31.273000             🧑  作者: Mango
Unity 是一款常用的游戏引擎,在开发游戏时常常需要使用到 Unity 的层次结构窗口,而 Unity 默认提供的层次结构窗口并不能满足我们的需求。本文介绍如何自定义 Unity 的层次结构窗口,让您的工作更加高效便捷。
Unity 的层次结构窗口是用于管理游戏对象的,开发者可以在这个窗口中对游戏对象进行创建、删除、重命名、转换、排序、搜索等操作。不过,Unity 默认提供的层次结构窗口并不能满足我们的需求,我们需要对其进行自定义,以弥补不足。
自定义 Unity 的层次结构窗口有几种方法:
使用 Unity 的 Editor 中的 Inspector 自定义窗口,可以在 Inspector 窗口中自定义层次结构窗口,这种方法比较简单,但是功能相对较弱。
使用 Unity 的 Editor 中的 EditorGUI 自定义窗口,可以根据需求自定义各种控件,这种方法是 Unity 提供最灵活的方法。
使用 Unity 的 Editor 中的 IMGUI 自定义窗口,IMGUI 全称是Immediate Mode GUI
, 可以理解为即时模式 GUI,其实在游戏中也可以使用,但相对偏底层,不太推荐,本文也不做详细介绍。
我们可以在 Inspector 窗口中对 Unity 的层次结构窗口进行自定义,这种方法比较简单,以下是使用 Inspector 自定义窗口的步骤:
using UnityEngine;
using UnityEditor;
public class CustomHierarchyWindow : EditorWindow
{
[MenuItem("Window/CustomHierarchyWindow")]
public static void ShowWindow()
{
GetWindow<CustomHierarchyWindow>("Custom Hierarchy Window");
}
void OnGUI()
{
// TODO: Custom the hierarchy window
}
}
在 Unity 的菜单栏中选择 “Window -> CustomHierarchyWindow” 就可以打开我们创建的自定义窗口了。
在 OnGUI 函数中添加我们需要的控件,例如添加一个 Label,或者添加一个 Button。
void OnGUI()
{
GUILayout.Label("This is a custom hierarchy window.");
if (GUILayout.Button("Click Me!"))
{
Debug.Log("You clicked me!");
}
}
EditorGUI 是 Unity 提供的一种自定义界面的 API,框架内置了大量的控件类型,使用方式也比较简单,以下是使用 EditorGUI 自定义窗口的步骤:
using UnityEngine;
using UnityEditor;
public class CustomHierarchyWindow : EditorWindow
{
[MenuItem("Window/CustomHierarchyWindow")]
public static void ShowWindow()
{
GetWindow<CustomHierarchyWindow>("Custom Hierarchy Window");
}
void OnGUI()
{
// TODO: Custom the hierarchy window
}
}
EditorGUILayout.BeginHorizontal()
和 EditorGUILayout.EndHorizontal()
可以将一组控件的排列方式设定成水平排列。EditorGUILayout.Space()
可以在界面中添加空白区域,使排版更加合理。EditorGUI.ObjectField()
可以创建一个 Object 选择框。void OnGUI()
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("Selected GameObject: ", GUILayout.Width(120));
EditorGUILayout.ObjectField(Selection.activeGameObject, typeof(GameObject), true);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
GUILayout.Label("Name: ", GUILayout.Width(120));
Selection.activeGameObject.name = GUILayout.TextField(Selection.activeGameObject.name);
EditorGUILayout.EndHorizontal();
}
以上就是本文介绍的 Unity 自定义层次结构窗口的两种方法:Inspector 自定义窗口和 EditorGUI 自定义窗口,这两种方法各有优缺点,开发者可以根据项目的需要进行选择。同时,本文仅介绍了一些基础的控件类型,更多高级的控件类型可以通过 Google 或参考官方文档学习。
参考: