UE4 使用 SlateStyle

UE4 使用 SlateStyle,第1张

UE4 使用 SlateStyle

文章目录
  • UE4 使用 SlateStyle
  • 前言
  • 一、创建 SlateStyle 管理类
  • 二、创建 SlateWidgetStyle 资源
    • 1. 在代码中自定义资源内容
    • 2. 在UE编辑器中修改资源样式
  • 三、获取 SlateWidgetStyle 资源
  • 总结


前言

在编写 Slate 时,因为没有可视化界面,我们需要 SlateBrush 才能显示一张图片。好在 Slate 提供了画刷样式集合 SlateStyle,方便我们管理和获取各种画刷、字体等资源。

在源码中检索以 Style.h 结尾的文件,可以找到一大堆内容可供参考。


一、创建 SlateStyle 管理类

我们一般会创建一个单例来持有和管理 SlateStyle,也方便我们获取 Style:

/**
 * MyStyle 示例
 */
class FMyStyle
{
public:

	static void Initialize();

	static void Shutdown();

	/** @return the singleton instance. */
	static const ISlateStyle& Get( );

	static FName GetStyleSetName();

private:

	static TSharedRef< class FSlateStyleSet > Create();

private:

	static TSharedPtr< class FSlateStyleSet > StyleInstance;
};

InitializeShutdown 方法用于注册和注销 Style,一般我们会分别在模块的 StartupModuleShutdownModule 中调用它们:

void FMyStyle::Initialize()
{
	if (!StyleInstance.IsValid())
	{
		StyleInstance = Create();
		FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance);
	}
}

void FMyStyle::Shutdown()
{
	FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance);
	ensure(StyleInstance.IsUnique());
	StyleInstance.Reset();
}

CreateGet 方法用来创建和获取我们的 Style 单例,各种画刷也在这里被创建出来。
UE 贴心的封装了 FSlateGameResources 类型,让我们能够在编辑器中更直观地修改我们的 Style,它会在创建时自动载入指定目录下的各种 Style 资源;

TSharedRef< class FSlateStyleSet > FMyStyle::Create()
{
	TSharedRef< FSlateStyleSet > Style = FSlateGameResources::New(GetStyleSetName(), TEXT("/Game/Widgets"), TEXT("/Game/Widgets"));
	return Style;
}

const ISlateStyle& FMyStyle::Get()
{
	return *StyleInstance;
}

GetStyleSetName 方法主要是用来定义我们的 Style 集合名称,需要注意不要注册同名的 Style,会触发 check 断言。

二、创建 SlateWidgetStyle 资源 1. 在代码中自定义资源内容

我们通过 UE4 编辑器创建C++类的窗口中,创建 SlateWidgetStyle 类型的 C++ 类,会自动生成一个结构体和一个 WidgetStyle 类,我们只需要关注这里的结构体即可,在这个结构体中我们可以添加各种画刷内容

USTRUCT()
struct FMySlateStyle : public FSlateWidgetStyle
{
	GENERATED_USTRUCT_BODY()

	FMySlateStyle();
	virtual ~FMySlateStyle();

	// FSlateWidgetStyle
	virtual void GetResources(TArray<const FSlateBrush*>& OutBrushes) const override;
	static const FName TypeName;
	virtual const FName GetTypeName() const override { return TypeName; };
	static const FMySlateStyle& GetDefault();

	// 在这个结构体中添加我们的各种画刷
	UPROPERTY(EditInstanceOnly)
	FSlateBrush MyBrush;
};
2. 在UE编辑器中修改资源样式

接下来打开UE编辑器,在我们指定的目录中用我们的类创建一个 SlateWidgetStyle(在 User Interface 一栏中),就能看到包含一个 MyBrush 样式的编辑界面了。

三、获取 SlateWidgetStyle 资源

通过我们的单例类可以获取 SlateWidgetStyle 资源

// 参数是 /Game/Widgets 下的相对路径,即 /Game/Widgets/MyWidgetStyle
// 即可获得到上图中的资源
const FMySlateStyle& MyStyle = FMyStyle::Get().GetWidgetStyle<FMySlateStyle>(TEXT("MyWidgetStyle"));

// 从资源中获取我们定义的画刷即可
TSharedRef<SImage> NewImage = SNew(SImage)
	.Image(&MyStyle.MyImage);

总结

通过 SlateStyle,我们就能够可视化的管理和修改 Slate 或 UWidget 中用到的各种资源了。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1295476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存