c++获取umg ue_unreal_ue4使用C++动态载入UMG与Slot
不啰唆,直接先上CODE:
// Fill out your copyright notice in the Description page of Project Settings.
UCLASS ()
class HOPETOWERDEFENSE_API AHopePlayerController : public APlayerController
{
// GENERATED_BODY()
GENERATED_UCLASS_BODY ()
public:
// AHopePlayerController(const FObjectInitializer& ObjectInitializer);
virtual ~AHopePlayerController ();
public:
virtual void BeginPlay () override;
UPROPERTY (EditDefaultsOnly, BlueprintReadOnly, Category = UI)
TSubclassOf WidgetClass;
UPROPERTY ()
UGameWidget* WidgetInstance;
};
AHopePlayerController::AHopePlayerController ( const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// Must put in constructor
ConstructorHelpers::FClassFinder PutNameHere ( TEXT ( " /Game/MyUMG " ));
if (PutNameHere. Class ) {
WidgetClass = PutNameHere. Class ;
}
}
void AHopePlayerController::BeginPlay ()
{
Super::BeginPlay ();
if (WidgetClass) {
if (!WidgetInstance) {
WidgetInstance = CreateWidget( this , WidgetClass);
UImage* image = NewObject( UImage::StaticClass ());
image-> SetVisibility (ESlateVisibility::Visible);
UPanelWidget* rootPanel = (UPanelWidget*)WidgetInstance-> GetRootWidget ();
// UPanelWidget* rootPanel = (UPanelWidget*)WidgetInstance->GetWidgetFromName(TEXT("RootCanvasPanel"));
rootPanel-> AddChild (image);
UCanvasPanelSlot* canvasPanelSlot = (UCanvasPanelSlot*)image->Slot;
auto slot = image->Slot;
canvasPanelSlot-> SetPosition ( FVector2D ( 100 , 100 ));
}
}
if (!WidgetInstance-> GetIsVisible ())
{
WidgetInstance-> AddToViewport ();
}
}
可以看到在header档里面宣告了一个WidgetClass跟一个WidgetInstance。
其中寻找WidgetClass的动作必须放在constructor里面,另外:
ConstructorHelpers::FClassFinder PutNameHere(TEXT(“/Game/MyUMG”));
这边里面的路径指的是我们在editor做好放在Content资料夹的Widget Blueprint(名字是MyUMG.uasset 的那个),这里不用写完整路径的原因是FClassFinder内部会自动加入相关的suffix,如下图:
接下来在BeginPlay里面做的事情就是用这个Class把WidgetInstance建立出来,并加入一个UImage进到这个Widget里面去。
在这里必须要注意的是并不是所有的Widget都有AddChild这个方法,所以我们才需要先拿出RootCanvasPanel之后才能把image加进去。
什么是Slot?从名称来看,它就是用来让别人把东西挂上去的『洞』,只要我们的child挂上某个parent的洞之后,就获得了该parent所提供的调整界面,如下图:
在code里面我们canvasPanelSlot->SetPosition(FVector2D(100, 100)),其实就是调整editor里面的Position X跟Position Y。值得注意的是Slot里面的参数都是相对于parent的,而不是绝对的。
下面再给出一个挂到Button下面之后能够调整的slot参数:
引自:http://dorgon.horizon-studio.net
c++获取umg ue_unreal_ue4使用C++动态载入UMG与Slot相关推荐
- 实现Android 动态载入APK(Fragment or Activity实现)
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...
- 深入浅出Android动态载入jar包技术
在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )
文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...
- Android 根据从服务器中获取的rgb值实现动态改变圆角加框的Imageview 的背景色
先上图,效果图如上. 本来考虑用facebook的SimpleDraweeView 来实现圆角加框的,但并非所有的图片分支部分都可以实现圆角,目前只有占位图片和实际图片可以实现圆角. 后来使用自定义的 ...
- AMD规范:简单而优雅的动态载入JavaScript代码
本文翻译自http://www.sitepen.com/blog/2010/11/04/requirejsamd-module-forms/,并加入部分自己的解释. CommonJS 提出了一种用于同 ...
- Python 动态载入模块
lib文件夹下有test.py文件: test.py文件内容如下: class simple(object):def __init__(self):self.name='刚田武' 在'动态载入模块.p ...
- dll侧加载_动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...
- 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
原文地址:https://www.cnblogs.com/westsoft/p/5936092.html 动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行 ...
- 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
x动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 G ...
最新文章
- 高手过招, 为什么 Redis Cluster 是16384个槽位?
- 法国拟将雷诺与日产合并 代表团抵日进行谈判
- COM原理与应用之COM的实现
- 【阿里云课程】图像翻译GAN结构与应用
- java继承总结_java继承总结(二)
- dotnet 使用 Infer# 自动分析代码缺陷
- int转换为cstring_PostgreSQL 隐式类型转换探秘
- 复现nature communication PCA原图|代码分析(一)
- java 的单态模式(只可以创建一个对象)
- python界面设计模块_Python+Pycharm+PyQT5可视化程序设计入门
- python做单元测试_如何使用python做单元测试?
- java基础-对象-练习集锦
- WhereHows解读
- 计算机科学发展与大规模集成电路,计算机科学与技术发展趋势
- 百度贴吧安卓客户端网络通信行为分析
- 东大22春《马克思主义基本原理概论》在线平时作业1百分非答案
- LSTM预测多支股票的收盘价
- 思科交换机指示灯全解
- 计算机考研院校排名2015,2015年计算机考研学校排名
- 【信号与系统】系统线性时不变、因果稳定性的判定