实例甜点 Unreal Engine 4迷你教程(3)之用C++改变Image小部件的其它属性
完成本迷你教程之前,请前往完成以下迷你教程:
·实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色;
在上一次的迷你教程的LearnWidgets工程上进行(如果你不亲自动手做的话,只关注标代码部分即可粗略知道要点)。
本节将会批量介绍一些重要的UMG中的蓝图节点对应的C++代码;
第一个实验:
在蓝图中:

在代码中则等价为:

▼代码开始
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("Learning How 2 Use C++ to Change UI"));
if (MyImage->GetVisibility() != ESlateVisibility::Hidden)
MyImage->SetVisibility(ESlateVisibility::Hidden);
else
MyImage->SetVisibility(ESlateVisibility::Visible);
}
}
▲代码结束
第二组实验:
在蓝图中:

在代码中则等价为:
▼代码开始
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("Learning How 2 Use C++ to Change UI"));
MyImage->RemoveFromParent();
}
}
▲代码结束
第三组实验:
在蓝图中:

在代码中则等价于:
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
if (MyImage->IsHovered())
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("Hovering"));
}
}
}
如果你想看到效果,在关卡蓝图中设置

效果:

第四组实验:
第4.1步:新建一个材质如下(名为MyM):

第4.2步:应用它;

好了,本教程假设你知道动态材质实例和设置参数,如果不知道,请去了解。
为了实现蓝图中的下述功能:

在C++中可以这样做:
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
UMaterialInstanceDynamic* MID = MyImage->GetDynamicMaterial();
MID->SetScalarParameterValue(FName(TEXT("Red")),
1.0f
);
}
}
Tips:注意头文件:#include "Materials/MaterialInstanceDynamic.h"

如果想要读取参数值,可以这样做:
▼代码开始
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
UMaterialInstanceDynamic* MID = MyImage->GetDynamicMaterial();
float RedValueCurrent = 0.f;
MID->GetScalarParameterValue(FName(TEXT("Red")), RedValueCurrent);
MID->SetScalarParameterValue(FName(TEXT("Red")),
RedValueCurrent + 0.1
);
}
}
▲代码结束
(上述代码的效果是每一次Action1都会变红一些)
第五组实验:
寻找子组件。首先,在weapondisplayer中添加子userwidget,效果如下(其中“”Card“” TextBlock是subwidgetcard中的唯一小部件);


▼代码开始
void AWidgetMng::LearnImage()
{
UImage* MyImage = Cast<UImage>(SlaveWidget->GetWidgetFromName(TEXT("MyImage")));
if (MyImage)
{
UUserWidget* MySubWidget = Cast<UUserWidget>(SlaveWidget->GetWidgetFromName(TEXT("MySubWidget")));
if (MySubWidget)
{
UE_LOG(LogTemp, Warning, TEXT("%s"), *FString("75 LearnImage"));
UTextBlock* MySubWidgetText = Cast<UTextBlock>(MySubWidget->GetWidgetFromName(TEXT("MySubWidgetText")));
if (MySubWidgetText)
{
MySubWidgetText->SetText(FText::FromString("success"));
}
}
}
}
▲代码结束

——小江村儿的文杰 zouwj5@qq.com 2017年8月2日16:58:48
实例甜点 Unreal Engine 4迷你教程(3)之用C++改变Image小部件的其它属性的更多相关文章
- 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色
完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上
完成本迷你教程之前,请前往完成以下迷你教程: 无前置教程待完成. 本教程适合的人群: 初学者,具有开发经验两周: 本示例的目的:为了在代码中实现UMG中的这个功能: 说明:这是一些列迷你教程的首篇,所 ...
- 实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量
本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步: ...
- Unreal Engine 4 系列教程 Part 1:入门
原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...
- Unreal Engine 4 系列教程 Part 3:材质教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 4:UI教程
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- Unreal Engine 4 系列教程 Part 5:制作简单游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
随机推荐
- 用TestPMD测试DPDK性能和功能
本文介绍了数据平面开发工具包(DPDK)TestPMD应用程序,展示了如何构建和配置TestPMD, 以及如何用它来检查使用DPDK的不同网络设备的性能和功能. TestPMD是一个使用DPDK软件包 ...
- Software Engineering at Google
Google的Fergus Henderson在Software Engineering at Google中介绍了Google的软件工程实践. 软件开发 源码仓库 单一源代码仓库,除了核心配置和安全 ...
- thinkphp接收阿里淘宝客数据
坑在于淘宝客api返回的数据对象是SimpleXMLElement Object类型,不转为php的json array类型数据直接扔到thinkphp循环输出中会达不到要的效果,奇奇怪怪的数组,一度 ...
- python脚本1_给一个半径求圆的面积和周长
#给一个半径,求圆的面积和周长,圆周率3.14 r = int(input('r=')) print('area='+str(3.14*r*r)) print('circumference='+str ...
- ionic2——开发利器之Visual Studio Code 常用快捷键
主命令框 F1 或 Ctrl+Shift+P: 打开命令面板.在打开的输入框内,可以输入任何命令,例如: 按一下 Backspace 会进入到 Ctrl+P 模式 在 Ctrl+P 下输入 > ...
- vim编辑16进制
你可以在vim中可以把文件转换为16进制来显示: :%!xxd 解释:把所有的行(%)用本地(!)的xxd程序打开. xxd本是linux下一个显示.编辑.转换二进制的命令. 返回正常显示: :%!x ...
- L144
Puny Dwarf Planet, Named 'Goblin,' Found Far Beyond PlutoA scrawny dwarf planet nicknamed "the ...
- L131
Fake, Low Quality Drugs Come at High CostAbout one in eight essential medicines in low- and middle-i ...
- 使用ORC识别图片的文字
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Golang的接口
当一只鸟走路像鸭子,游泳像鸭子,叫起来也像鸭子,那么我们就认为它就是鸭子. Duck typing 的理念因此比喻得名. Golang 通过 interface 实现 duck typing. Eff ...