完成本迷你教程之前,请前往完成以下迷你教程:

·实例甜点 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小部件的其它属性的更多相关文章

  1. 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色

    完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...

  2. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren

    前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...

  3. 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove

    本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...

  4. 实例甜点 Unreal Engine 4迷你教程(1)之如何用C++将纹理绘制在UserWidget的Image小部件上

    完成本迷你教程之前,请前往完成以下迷你教程: 无前置教程待完成. 本教程适合的人群: 初学者,具有开发经验两周: 本示例的目的:为了在代码中实现UMG中的这个功能: 说明:这是一些列迷你教程的首篇,所 ...

  5. 实例甜点 Unreal Engine 4迷你教程(5)之函数中的静态变量

    本小节的教程无前置教程,可直接学习,篇幅很短. 本教程浓缩起来就是一句话:函数中的静态变量在调试过程中保留值.所以需要谨慎对待. 什么意思?请先不要一步一步对着做,而整体地看一遍下面的过程: 第一步: ...

  6. Unreal Engine 4 系列教程 Part 1:入门

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...

  7. Unreal Engine 4 系列教程 Part 3:材质教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  8. Unreal Engine 4 系列教程 Part 4:UI教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  9. Unreal Engine 4 系列教程 Part 5:制作简单游戏

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

随机推荐

  1. 实际工作中遇到关于Struts2线程安全的问题解决

    今天工作遇到一个难缠的bug,浪费了2个小时终于解决. 问题描述:对资源的管理中用到关键字查询以及分页查询.视图控制器用到struts2,数据存储用spring的data-mongodb来存储数据以及 ...

  2. Git的add、commit、push命令

    简单的代码提交流程1.git status 查看工作区代码相对于暂存区的差别2.git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录3.git commit -m ‘注 ...

  3. C++ 学习使用

    1.C++已经不太建议用#define const用法 定义小函数,不改变内部成员的可以用inline 2.namespace使用 3.C语言预处理 #define这些的使用 #pragma once ...

  4. app与后台的token、sessionId、RSA加密登录认证与安全解决方案

    一.登录机制 粗略地分析, 登录机制主要分为登录验证.登录保持.登出三个部分.登录验证是指客户端提供用户名和密码,向服务器提出登录请求,服务器判断客户端是否可以登录并向客户端确认. 登录认保持是指客户 ...

  5. 牛客比赛-状压dp

    链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史. 这里非常重视正义.荣耀.职责的意 ...

  6. Java连接DB2

    package com.java.test.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  7. python 在头文件添加 #include \"stdafx.h\"\r\n

    import osimport shutil#-*- coding:cp936 -*-import codecsfrom sys import argv def replace_all_files(p ...

  8. Fiddler工作原理与代理设置

    1,什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的 ...

  9. jdbc之防sql注入攻击

    1.SQL注入攻击:    由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执 ...

  10. MASM 16位汇编程序几种典型的格式

    1.有名段 data segment output db 'Hello world!$' data ends code segment start: assume ds:data,cs:code mo ...