📜  unity 自定义层次结构窗口 - C# (1)

📅  最后修改于: 2023-12-03 15:35:31.273000             🧑  作者: Mango

Unity 自定义层次结构窗口 - C#

Unity 是一款常用的游戏引擎,在开发游戏时常常需要使用到 Unity 的层次结构窗口,而 Unity 默认提供的层次结构窗口并不能满足我们的需求。本文介绍如何自定义 Unity 的层次结构窗口,让您的工作更加高效便捷。

简介

Unity 的层次结构窗口是用于管理游戏对象的,开发者可以在这个窗口中对游戏对象进行创建、删除、重命名、转换、排序、搜索等操作。不过,Unity 默认提供的层次结构窗口并不能满足我们的需求,我们需要对其进行自定义,以弥补不足。

自定义层次结构窗口的方法

自定义 Unity 的层次结构窗口有几种方法:

  1. 使用 Unity 的 Editor 中的 Inspector 自定义窗口,可以在 Inspector 窗口中自定义层次结构窗口,这种方法比较简单,但是功能相对较弱。

  2. 使用 Unity 的 Editor 中的 EditorGUI 自定义窗口,可以根据需求自定义各种控件,这种方法是 Unity 提供最灵活的方法。

  3. 使用 Unity 的 Editor 中的 IMGUI 自定义窗口,IMGUI 全称是Immediate Mode GUI, 可以理解为即时模式 GUI,其实在游戏中也可以使用,但相对偏底层,不太推荐,本文也不做详细介绍。

使用 Inspector 自定义窗口

我们可以在 Inspector 窗口中对 Unity 的层次结构窗口进行自定义,这种方法比较简单,以下是使用 Inspector 自定义窗口的步骤:

  1. 创建自定义窗口的脚本
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
    }
}
  1. 在 Unity 的菜单栏中选择 “Window -> CustomHierarchyWindow” 就可以打开我们创建的自定义窗口了。

  2. 在 OnGUI 函数中添加我们需要的控件,例如添加一个 Label,或者添加一个 Button。

void OnGUI()
{
    GUILayout.Label("This is a custom hierarchy window.");

    if (GUILayout.Button("Click Me!"))
    {
        Debug.Log("You clicked me!");
    }
}
  1. 这样,我们就可以得到一个自定义的层次结构窗口了。
使用 EditorGUI 自定义窗口

EditorGUI 是 Unity 提供的一种自定义界面的 API,框架内置了大量的控件类型,使用方式也比较简单,以下是使用 EditorGUI 自定义窗口的步骤:

  1. 创建自定义窗口的脚本(与上述步骤 1 一致)
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
    }
}
  1. 在 OnGUI 函数中添加我们需要的控件
    • EditorGUILayout.BeginHorizontal()EditorGUILayout.EndHorizontal() 可以将一组控件的排列方式设定成水平排列。
    • EditorGUILayout.Space() 可以在界面中添加空白区域,使排版更加合理。
    • EditorGUI.ObjectField() 可以创建一个 Object 选择框。
    • 更多控件类型请自行 Google 或参考官方文档。
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();
}
  1. 这样,我们就可以得到一个自定义的层次结构窗口了。
总结

以上就是本文介绍的 Unity 自定义层次结构窗口的两种方法:Inspector 自定义窗口和 EditorGUI 自定义窗口,这两种方法各有优缺点,开发者可以根据项目的需要进行选择。同时,本文仅介绍了一些基础的控件类型,更多高级的控件类型可以通过 Google 或参考官方文档学习。

参考:

Unity Manual

XR-Zone 的博客