Version: Unity 6.0 (6000.0)
语言 : 中文
使用 UQuery 查找视觉元素
自定义控件

使用 C# 脚本的结构 UI

技术用户可以直接在 C# 脚本中定义__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
的布局。

您可以在 USS 文件中定义控件的外观,也可以在 C# 脚本中修改控件的样式属性。

控件是交互式的,它代表可以更改的值。例如,FloatField 代表一个浮点值。您可以创建 C# 脚本来更改控件的值、注册回调或应用数据绑定。

使用 C# 脚本将控件添加到 UI

要在 UI 中使用控件,请将其添加到视觉树。

以下示例将 Button 控件添加到现有视觉树中。

var newButton = new Button("Click me!");
rootVisualElement.Add(newButton);

向 UI 层级结构添加控件时,布局引擎会自动处理大小和定位。您还可以覆盖视觉元素的大小和位置。

更改控件值

要访问或更改控件的值,请使用其 value 属性。

以下示例创建了一个 Toggle 控件和一个 Button 控件。当您点击按钮时,该开关的值会翻转。

// Create a toggle and register callback
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
rootVisualElement.Add(m_MyToggle);

// Create button to flip the toggle's value
Button button01 = new Button() { text = "Toggle" };
button01.clicked += () =>
{
    m_MyToggle.value = !m_MyToggle.value;
};
rootVisualElement.Add(button01);

要了解有关特定控件的属性的更多信息,请参阅 UI 工具包控件参考。

注册回调

所有具有 value 属性的内置控件都会在值发生变化时发送一个事件。您可以注册一个回调来接收这个事件。

以下示例将创建一个 Toggle 控件并注册回调:

// Create a toggle and register callback
m_MyToggle = new Toggle("Test Toggle") { name = "My Toggle" };
m_MyToggle.RegisterValueChangedCallback((evt) => { Debug.Log("Change Event received"); });
rootVisualElement.Add(m_MyToggle);

要了解有关回调和事件的更多信息,请参阅事件处理。

应用数据绑定

可以直接将控件绑定到对象或序列化属性。例如,一个 FloatField 控件可绑定到属于某个 MonoBehaviour 的公共浮点变量。当控件绑定到该属性时,它会自动显示该属性的值。当您修改该控件时,属性值会更新。

同样,当属性值通过代码更改时,UI 会显示更新后的值。这种双向连接在创建自定义 Inspector 窗口时很有用。

有关数据绑定的更多信息,请参阅 SerializedObject 数据绑定。

并非所有控件都是可绑定的。要查看所有内置控件的列表以及它们是否支持绑定,请参阅 UI 工具包控件参考。

访问控件的只读子项的属性

某些控件具有只读子元素。例如,ListView 控件有一个 ScrollView 子项。您可以使用 UQuery 访问子项的属性并覆盖其值。

以下示例通过覆盖 ScrollView 子项的 mouseWheelScrollSize 属性来更改 ListView 控件的滚动速度:

var scrollView = listView.Q<ScrollView>();
scrollView.mouseWheelScrollSize = 55;

管理控制状态

控件具有可以在 C# 脚本中管理的不同状态。例如,可以启用或禁用控件。

以下示例创建了一个 Toggle 控件和一个 Button 控件。当您点击按钮时,该开关会被禁用。

// Create a toggle.
Toggle myToggle = new Toggle("A Toggle");

// Create a button to disable the toggle.
Button button01 = new Button();
button01.text = "Button01";
button01.RegisterCallback<ClickEvent>(evt =>
{
    myToggle.SetEnabled(false);
});

还可以使用伪类在 USS 中实现状态更改时的视觉反馈更改。中实现状态更改时的视觉反馈更改。例如,要禁用开关,请使用具有 disabled 伪状态的选择器:

.unity-button:disabled
{
    background-color: #000000;
}

其他资源

使用 UQuery 查找视觉元素
自定义控件