版本:Unity 6 (6000.0)
语言:英语
使用 UQuery 查找可视元素
自定义控件

使用 C# 脚本构建 UI

技术用户可以直接在 C# 脚本一段代码,允许您创建自己的组件,触发游戏事件,随着时间推移修改组件属性,并以您喜欢的任何方式响应用户输入。 更多信息
词汇表 中查看
中定义 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
词汇表 中查看
的布局。

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

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

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

要在 UI 中使用控件,请将其添加到 可视化树由轻量级节点组成的对象图,它包含窗口或面板中的所有元素。它定义了您使用 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 会显示更新的值。这种双向连接在创建自定义 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑这些值。 更多信息
词汇表 中查看
窗口时非常有用。

有关数据绑定的更多信息,请参见 序列化对象数据绑定

并非所有控件都可绑定。有关内置控件列表及其是否支持绑定的信息,请参见 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 查找可视元素
自定义控件