找回密码
 立即注册
查看: 352|回复: 0

UE Slate样式

[复制链接]
发表于 2022-4-27 21:50 | 显示全部楼层 |阅读模式
先说明一下,这个是因为写插件的时候需要用到的,项目中如果有需要的话,也可以参考!


前提

在Module要使用Style之前,我们就已经需要对style进行注册!
void FMyEditorModule::StartupModule()
{
    // 创建style
    FMyEditorStyle::Initialize();
    ...
}
还有在Module销毁的时候记得清理一下
void FMyEditorModule::ShutdownModule()
{
    FMyEditorStyle::Shutdown();
}
注册style

为了防止多次生成一些对象,我这里使用了静态
TSharedPtr< FSlateStyleSet > FMyEditorStyle::StyleInstance = nullptr;

void FMyEditorStyle::Initialize()
{
    if (!StyleInstance.IsValid())
    {
        StyleInstance = Create();
        FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance);
    }
}
FSlateStyleRegistry::RegisterSlateStyle可以将已经处理好的style添加到全局的slatestyle中,以方便我们在代码中使用;
TSharedRef< FSlateStyleSet > FMyEditorStyle::Create()
{
    // "MyEditor"是这个style的名称,如果要使用的时候需要记住这个名称,可以提取成成员方法,我偷懒,就不说了
    TSharedRef< FSlateStyleSet > style = MakeShareable(new FSlateStyleSet("MyEditor"));
    style->SetContentRoot(IPluginManager::Get().FindPlugin(TEXT("MyEditor"))->GetBaseDir() / TEXT("Resources"));
    style->Set("MyEditor.MenuIcon", new FSlateImageBrush(style->RootToContentDir("Button_Icon40", TEXT(".png")), FVector2D(128,128)));
    return style;
}
IPluginManager的使用需要在Build.cs中添加DependencyModuleNames.Add Projects;
style->SetContentRoot是设置相对目录的!
style->Set是可以绑定相关的样式的


demo代码中,我使用的是图片



FSlateImageBrush
中设置的大小可以和资源的真实大小无关,但是该大小会同步影响了菜单的大小,文章头的诡异就是因为我设置成了 了,最好的大小是 ;

简单使用

    ToolBarBuilder.AddComboButton(
        FUIAction(),
        FOnGetContent::CreateRaw(this, &FMyEditorModule::AddToolsSubMenu),
        LOCTEXT("MyTools", "My Tools"),
        LOCTEXT("MyToolsTips", "My Tools Tips"),
        FSlateIcon(TEXT("MyEditor"), TEXT("MyEditor.MenuIcon"))
    );
只需要简单在FSlateIcon中传入style的名称和对应的key就可以了!
销毁

清理引用就行了!
void FMyEditorStyle::Shutdown()
{
    FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance);
    ensure(StyleInstance.IsUnique());
    StyleInstance.Reset();
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-1-22 20:52 , Processed in 0.064467 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表