Version: 2022.3

EditorGUI.BeginFoldoutHeaderGroup

切换到手册
public static bool BeginFoldoutHeaderGroup (Rect position, bool foldout, string content, GUIStyle style= EditorStyles.foldoutHeader, Action<Rect> menuAction, GUIStyle menuIcon);
public static bool BeginFoldoutHeaderGroup (Rect position, bool foldout, GUIContent content, GUIStyle style= EditorStyles.foldoutHeader, Action<Rect> menuAction, GUIStyle menuIcon);

参数

foldout 显示的折叠状态。
content 要显示的标签。
style 可选 GUIStyle
menuAction 在单击图标时发生的操作。
menuIcon 图标的可选 GUIStyle
position 屏幕上用于此控件的矩形。

返回

bool 用户选择的折叠状态。如果为 true,则应渲染子对象。

描述

创建一个左侧带有折叠箭头的标签。

这适用于文件夹之类的结构,其中子对象仅在展开父项时显示。此控件不能嵌套在其他 BeginFoldoutHeaderGroup 中。要使用多个折叠,每个方法都必须以 EndFoldoutHeaderGroup 结尾。


创建可隐藏或显示所选变换的可折叠标题菜单。

// Create a foldable header menu that hides or shows the selected Transform position.
// If you have not selected a Transform, the Foldout item stays folded until
// you select a Transform.

using UnityEditor; using UnityEngine;

public class FoldoutHeaderUsage : EditorWindow { bool showPosition = true; string status = "Select a GameObject";

[MenuItem("Examples/Foldout Header Usage")] static void CreateWindow() { GetWindow<FoldoutHeaderUsage>(); }

public void OnGUI() { // An absolute-positioned example: We make foldout header group and put it in a small rect on the screen. showPosition = EditorGUI.BeginFoldoutHeaderGroup(new Rect(10, 10, 200, 100), showPosition, status);

if (showPosition) if (Selection.activeTransform) { Selection.activeTransform.position = EditorGUI.Vector3Field(new Rect(10, 30, 200, 100), "Position", Selection.activeTransform.position); status = Selection.activeTransform.name; }

if (!Selection.activeTransform) { status = "Select a GameObject"; showPosition = false; } // End the Foldout Header that we began above. EditorGUI.EndFoldoutHeaderGroup(); } }


创建可在单击时将所选对象移到 0,0,0 的菜单项操作。

// Create a foldable header menu that hides or shows the selected Transform position.
// If you have not selected a Transform, the Foldout item stays folded until
// you select a Transform.

using UnityEditor; using UnityEngine;

public class FoldoutHeaderUsage : EditorWindow { bool showPosition = true; string status = "Select a GameObject";

[MenuItem("Examples/Foldout Header Usage")] static void CreateWindow() { GetWindow<FoldoutHeaderUsage>(); }

public void OnGUI() { // An absolute-positioned example: We make foldout header group and put it in a small rect on the screen. showPosition = EditorGUI.BeginFoldoutHeaderGroup(new Rect(10, 10, 200, 100), showPosition, status, null, ShowHeaderContextMenu);

if (showPosition) if (Selection.activeTransform) { Selection.activeTransform.position = EditorGUI.Vector3Field(new Rect(10, 30, 200, 100), "Position", Selection.activeTransform.position); status = Selection.activeTransform.name; }

if (!Selection.activeTransform) { status = "Select a GameObject"; showPosition = false; } // End the Foldout Header that we began above. EditorGUI.EndFoldoutHeaderGroup(); }

void ShowHeaderContextMenu(Rect position) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Move to (0,0,0)"), false, OnItemClicked); menu.DropDown(position); }

void OnItemClicked() { Undo.RecordObject(Selection.activeTransform, "Moving to center of world"); Selection.activeTransform.position = Vector3.zero; } }