版本: 2023.2+
此示例演示如何在自定义控件中使用自定义 USS 变量。
此示例创建一个自定义控件,该控件从 USS 读取两种颜色并使用它们生成纹理。
您可以在此 GitHub 仓库 中找到此示例创建的完整文件。
本指南适用于熟悉 Unity 编辑器、UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
请参见 词汇表 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容
创建一个 C# 脚本以定义自定义控件,并创建一个 USS 文件以定义自定义样式。
create-custom-style-custom-control
的文件夹来存储您的文件。ExampleElementCustomStyle
文件夹中,创建一个名为 ExampleElementCustomStyle.cs
的 C# 脚本,并将它的内容替换为以下内容using UnityEngine;
using UnityEngine.UIElements;
namespace UIToolkitExamples
{
[UxmlElement]
public partial class ExampleElementCustomStyle : VisualElement
{
// Use CustomStyleProperty<T> to fetch custom style properties from USS
static readonly CustomStyleProperty<Color> S_GradientFrom = new CustomStyleProperty<Color>("--gradient-from");
static readonly CustomStyleProperty<Color> S_GradientTo = new CustomStyleProperty<Color>("--gradient-to");
// Image child element and its texture
Texture2D m_Texture2D;
Image m_Image;
public ExampleElementCustomStyle()
{
// Create an Image and a texture for it. Attach Image to self.
m_Texture2D = new Texture2D(100, 100);
m_Image = new Image();
m_Image.image = m_Texture2D;
Add(m_Image);
RegisterCallback<CustomStyleResolvedEvent>(OnStylesResolved);
}
// When custom styles are known for this control, make a gradient from the colors.
void OnStylesResolved(CustomStyleResolvedEvent evt)
{
Color from, to;
if (evt.customStyle.TryGetValue(S_GradientFrom, out from)
&& evt.customStyle.TryGetValue(S_GradientTo, out to))
{
GenerateGradient(from, to);
}
}
public void GenerateGradient(Color from, Color to)
{
for (int i = 0; i < m_Texture2D.width; ++i)
{
Color color = Color.Lerp(from, to, i / (float)m_Texture2D.width);
for (int j = 0; j < m_Texture2D.height; ++j)
{
m_Texture2D.SetPixel(i, j, color);
}
}
m_Texture2D.Apply();
m_Image.MarkDirtyRepaint();
}
}
}
创建一个名为 ExampleElementCustomStyle.uss
的 USS 文件,并将它的内容替换为以下内容
ExampleElementCustomStyle {
--gradient-from: red;
--gradient-to: yellow;
}
创建一个 UI 文档以使用自定义控件,并将自定义样式应用于自定义控件。
ExampleElementCustomStyle
文件夹中,创建一个名为 ExampleElementCustomStyle.uxml
的 UI 文档。ExampleElementCustomStyle.uxml
在 UI 生成器中打开它。ExampleElementCustomStyle.uss
文件添加为现有 USS。这会将自定义 USS 变量应用于正方形。