• 实例甜点 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 20178216:58:48

  • 相关阅读:
    Java static修饰符小记
    nginx的使用
    Java 日期时间格式化
    Java Annotation使用详解
    栈的应用-四则运算表达式
    计算机网络——学习笔记
    Python __builtin__模块
    搭建Harbor私有库
    Prometheus k8s方式安装
    Day4_字典循环
  • 原文地址:https://www.cnblogs.com/JackSamuel/p/7283513.html
Copyright © 2020-2023  润新知