Version: Unity 6.0 (6000.0)
语言 : 中文
创建选项卡式菜单
使用开关 (Toggle) 创建条件 UI

创建弹出窗口

此示例演示了如何使用 UnityEditor.PopupWindow 来创建弹出窗口。

示例概述

此示例创建了一个通过自定义 Editor 窗口中的按钮来显示的弹出窗口。该弹出窗口有三个开关,在失去焦点时会关闭。

当按钮被选中时,会显示一个弹出窗口。
当按钮被选中时,会显示一个弹出窗口。

您可以在此 GitHub 代码仓库中找到此示例创建的完整文件。

先决条件

本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发者。在开始之前,请熟悉以下内容:

创建自定义 Editor 窗口

创建带有按钮的自定义 Editor 窗口。在__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
文档(UXML 文件)中定义按钮,并在 USS 文件中设置样式。最后,在 C# 脚本中定义按钮逻辑,以便在点击按钮时显示弹出窗口。

  1. 使用任何模板创建 Unity 项目。

  2. 右键点击项目 (Project) 窗口中,然后选择创建 (Create) > UI 工具箱 (UI Toolkit) > Editor 窗口 (Editor Window)

  3. UI Toolkit Editor Window Creator 窗口的 C# 框中输入 PopupExample

  4. 选择确认 (Confirm)。这会创建三个文件:PopupExample.csPopupExample.uxmlPopupExample.uss

  5. PopupExample.uxml 替换为以下内容:

           
    <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
    <Style src="PopupExample.uss" />
    <ui:Button text="Popup Options" display-tooltip-when-elided="true" class="popup-button" />
    </ui:UXML>
         
    
  6. PopupExample.cs 替换为以下内容:

            
    using UnityEditor;
    using UnityEngine.UIElements;
    using PopupWindow = UnityEditor.PopupWindow;
        
    public class PopupExample : EditorWindow
    {
         //Add menu item
         [MenuItem("Examples/Popup Example")]
         static void Init()
         {
              EditorWindow window = EditorWindow.CreateInstance<PopupExample>();
              window.Show();
         }
        
         private void CreateGUI()
         {
              var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/PopupExample.uxml");
              visualTreeAsset.CloneTree(rootVisualElement);
        
              var button = rootVisualElement.Q<Button>();
              button.clicked += () => PopupWindow.Show(button.worldBound, new PopupContentExample());
         }
    }
    
  7. PopupExample.uss 替换为以下内容:

    .popup-button {
        width: 200px;
    }
    

创建弹出窗口内容

创建一个 UI 文档(UXML 文件)以定义弹出窗口中的内容。创建一个 C# 类来设置窗口大小并显示窗口。

  1. Editor 文件夹中,创建一个名为 PopupWindowContent.uxml 并包含以下内容的 UI 文档:

    <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
        <ui:Toggle label="Toggle 1" name="Toggle1"/>
        <ui:Toggle label="Toggle 2" />
        <ui:Toggle label="Toggle 3" />
    </ui:UXML>
    
  2. Editor 文件夹中,创建一个名为 PopupContentExample.cs 并包含以下内容的 C# 文件:

    using UnityEditor;
    using UnityEngine;
    using UnityEngine.UIElements;
        
    public class PopupContentExample : PopupWindowContent
    { 
        public override void OnOpen()
        {
            Debug.Log("Popup opened: " + this);
        }
        
        public override VisualElement CreateGUI()
        {
            var visualTreeAsset = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>("Assets/Editor/PopupWindowContent.uxml");
            return visualTreeAsset.CloneTree();
        }
        
        public override void OnClose()
        {
            Debug.Log("Popup closed: " + this);
        }
    }
    
  3. 要测试弹出窗口,请从菜单中选择示例 (Example) > 弹出示例 (Popup Example) > 弹出示例 (Popup Options)

创建选项卡式菜单
使用开关 (Toggle) 创建条件 UI