不啰唆,直接先上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相关推荐

  1. 实现Android 动态载入APK(Fragment or Activity实现)

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38565345 近期由于项目太大了.导致编译通只是(Android对一个应用中的方法个数貌似有 ...

  2. 深入浅出Android动态载入jar包技术

    在实际项目中.因为某些业务频繁变更而导致频繁升级client的弊病会造成较差的用户体验,而这也恰是Web App的优势,于是便衍生了一种思路.将核心的易于变更的业务封装在jar包里然后通过网络下载下来 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  4. Android 根据从服务器中获取的rgb值实现动态改变圆角加框的Imageview 的背景色

    先上图,效果图如上. 本来考虑用facebook的SimpleDraweeView 来实现圆角加框的,但并非所有的图片分支部分都可以实现圆角,目前只有占位图片和实际图片可以实现圆角. 后来使用自定义的 ...

  5. AMD规范:简单而优雅的动态载入JavaScript代码

    本文翻译自http://www.sitepen.com/blog/2010/11/04/requirejsamd-module-forms/,并加入部分自己的解释. CommonJS 提出了一种用于同 ...

  6. Python 动态载入模块

    lib文件夹下有test.py文件: test.py文件内容如下: class simple(object):def __init__(self):self.name='刚田武' 在'动态载入模块.p ...

  7. dll侧加载_动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...

    动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...

  8. 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...

    原文地址:https://www.cnblogs.com/westsoft/p/5936092.html 动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行 ...

  9. 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

    x动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 G ...

最新文章

  1. 高手过招, 为什么 Redis Cluster 是16384个槽位?
  2. 法国拟将雷诺与日产合并 代表团抵日进行谈判
  3. COM原理与应用之COM的实现
  4. 【阿里云课程】图像翻译GAN结构与应用
  5. java继承总结_java继承总结(二)
  6. dotnet 使用 Infer# 自动分析代码缺陷
  7. int转换为cstring_PostgreSQL 隐式类型转换探秘
  8. 复现nature communication PCA原图|代码分析(一)
  9. java 的单态模式(只可以创建一个对象)
  10. python界面设计模块_Python+Pycharm+PyQT5可视化程序设计入门
  11. python做单元测试_如何使用python做单元测试?
  12. java基础-对象-练习集锦
  13. WhereHows解读
  14. 计算机科学发展与大规模集成电路,计算机科学与技术发展趋势
  15. 百度贴吧安卓客户端网络通信行为分析
  16. 东大22春《马克思主义基本原理概论》在线平时作业1百分非答案
  17. LSTM预测多支股票的收盘价
  18. 思科交换机指示灯全解
  19. 计算机考研院校排名2015,2015年计算机考研学校排名
  20. 【信号与系统】系统线性时不变、因果稳定性的判定

热门文章

  1. 武汉大学信息管理学院莅临法大大交流
  2. 如何将图片清晰度变高?电脑怎么调照片清晰度?
  3. Android 资源汇总
  4. Ubuntu18.04配置双网卡上网
  5. VUE element-ui之上传身份证照片正反面详细代码
  6. 存储备份从入门到精通
  7. 给未来的你nbsp;nbsp;—nbsp;李开复在2011…
  8. 无量纲处理、量纲变换与实时仿真理论
  9. 毕业设计-基于大数据的股票预测系统-python
  10. 用计算机弹凉凉的歌词,杨宗纬/张碧晨《凉凉》歌词