Version: 6000.3
语言: 中文
使用 UQuery 查找视觉元素
自定义控件

使用 C# 脚本构建 UI

技术用户可以直接在 C# 中定义 UI 的布局脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
.

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

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

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

要在 UI 中使用控件,请将其添加到可视化树轻量级节点组成的对象图,用于保存窗口或面板中的所有元素。它定义了使用 UI 工具包构建的每个 UI。
请参阅术语表
.

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

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

将控件添加到界面层次结构时,布局引擎会自动处理大小调整和定位。您还可以覆盖视觉元素的大小和位置

更改控制值

若要访问或更改控件的值,请使用其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 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。更多信息
请参阅术语表
窗户。

有关数据绑定的详细信息,请参阅 SerializedObject 数据绑定

并非所有控件都是可绑定的。有关内置控件的列表及其是否支持绑定,请参阅 UI 工具包内置控件参考

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

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

以下示例更改ListView通过覆盖mouseWheelScrollSize属性的ScrollView孩子:

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 查找视觉元素
自定义控件