前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UE4 编辑器中使用UMG

UE4 编辑器中使用UMG

原创
作者头像
sosioshen
发布2022-08-08 16:50:09
1.5K2
发布2022-08-08 16:50:09
举报
文章被收录于专栏:菜刀的耕耘

编辑器Slate

在编辑器开发中,无论是官方的例子还是网上的经验,基本上99%都是使用Slate进行的。 Slate用起来还是比较蛋疼的,没有一个图形化的界面拼UI,全部靠代码撸在某些页面制作上的确是有点困扰的。 (但其实习惯了还是可以的)

那么UMG是否可以在编辑器中使用呢? 答案是可以的。

Editor Utility Widget

先来看一个官方在UE4.22支持的一个功能 Editor UtilityWidget

官方地址: https://docs.unrealengine.com/en-US/InteractiveExperiences/UMG/UserGuide/EditorUtilityWidgets/index.html 中文参考: https://zhuanlan.zhihu.com/p/77512390

一段洋人做的纯蓝图+Editor Utility Widget做得编辑器插件过程 https://www.youtube.com/watch?v=u8c4Q2ve3AQ

制作UI看起来和普通的UI蓝图是一样的,里面的逻辑也可以通过蓝图的方式制作

但是这个东西用起来有个问题, 他只能通过 右键蓝图 或者菜单的固定位置唤起

而且它只能是以Tab的形式存在, 那我们可以在Slate中使用 Editor Utility Widget吗?

Slate 调用 Editor Utility Widget

  • 核心的方法是 TakeWidget()
  • 编辑器中需要一个World作为CreateWidget的参数
  • 我们还需要一个Window(也可以是其他Widget容器)去包含这个UMG的Widget UEditorUtilityWidgetBlueprint的GeneratedClass编译的时候会不可用,还只能用基类的,有点小疑惑

直接上代码:

代码语言:javascript
复制
	// Create a window for widget
	TSharedRef<SWindow> Window = SNew(SWindow)
		.Title(LOCTEXT("AddNewSkill", "Add New Skill"))
		.ClientSize(FVector2D(300, 200))
		.SupportsMinimize(false).SupportsMaximize(false);

	// Load widget from blueprint
	UBlueprint* Blueprint = LoadObject<UBlueprint>(NULL, TEXT("EditorUtilityWidgetBlueprint'/Game/MMODemo/UI/Blueprint/MainUI/NewSkillWindow.NewSkillWindow'"), NULL, LOAD_None, NULL);
	if (Blueprint && Blueprint->GeneratedClass->IsChildOf(UEditorUtilityWidget::StaticClass()))
	{
		// Get world for editor
		UWorld* World = GEditor->GetEditorWorldContext().World();

		TSubclassOf<UEditorUtilityWidget> WidgetClass = Blueprint->GeneratedClass;
		UEditorUtilityWidget* CreatedUMGWidget = CreateWidget<UEditorUtilityWidget>(World, WidgetClass);
		Window->SetContent(CreatedUMGWidget->TakeWidget());
	}

最终的结果展示

扩展到UUserWidget

其实上面的代码把 UEditorUtilityWidget 换成 UUserWidget也是完成成立的(本来UEditorUtilityWidget 就是继承于UUserWidget的 )

结果展示:(这里在我的编辑器窗体中加载了一个游戏用的UI界面)

在这个界面上绑定的蓝图也是直接有效,按钮都可以直接使用

总结

  • Slate仍然是主要制作编辑器UI的方式
  • UMG制作的UEditorUtilityWidgetBlueprint 可以在编辑器中直接使用,业务逻辑也可以全部用蓝图实现
  • UMG制作的界面UUserWidget以及他的子类UEditorUtilityWidgetBlueprint 都可以被Slate嵌套使用。在某些方面会比较方便

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编辑器Slate
  • Editor Utility Widget
  • Slate 调用 Editor Utility Widget
  • 扩展到UUserWidget
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档