栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

UE4 使用 SlateStyle

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

UE4 使用 SlateStyle

UE4 使用 SlateStyle

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


前言

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

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


一、创建 SlateStyle 管理类

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

class FMyStyle
{
public:

	static void Initialize();

	static void Shutdown();

	
	static const ISlateStyle& Get( );

	static FName GetStyleSetName();

private:

	static TSharedRef< class FSlateStyleSet > Create();

private:

	static TSharedPtr< class FSlateStyleSet > StyleInstance;
};

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

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

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

Create 和Get 方法用来创建和获取我们的 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& 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(TEXT("MyWidgetStyle"));

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

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号