UE5.1.1 c++从0开始(14.用C++写UMG类)

这篇具有很好参考价值的文章主要介绍了UE5.1.1 c++从0开始(14.用C++写UMG类)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先在这里放一个链接防止第一次看的朋友们不知道我在讲什么:https://www.bilibili.com/video/BV1nU4y1X7iQ/

这一段的教程不难,唯一新建的C++类是UMG的一个类。这个类用来写绑定在ai身上的血条。

总结一下一共做了什么事情:

  1. 给ai写了一个血条ui
  2. 重新整理了我们之前写的所有ui,放到了一个umg里头
  3. 初识了控制台以及三个控制台命令(其中两个自己写的,一个系统自带我们在上面改的)

首先是我们的C++写的UMG

SWorldUserWidget.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "SWorldUserWidget.generated.h"

/**
 * 
 */
UCLASS()
class ACTIONROGUELIKE_API USWorldUserWidget : public UUserWidget
{
	GENERATED_BODY()

        //meta=(BindWidget)是一个C++绑定UMG的方法,输入了这个参数之后,我们声明的这个指针的名字ParentSizeBox要和编辑器内的SizeBox同名,不然会报错
protected:
	UPROPERTY(meta=(BindWidget))
	class USizeBox* ParentSizeBox;
		
    //这个函数是我们每tick都要调用的函数,也是我们重写的函数
	virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;

    //AttachedActor指的是我们的这个血条的主人是谁,吸附在谁身上
public:
	UPROPERTY(BlueprintReadOnly,Category="UI")
	AActor* AttachedActor;
};

SWorldUserWidget.cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "SWorldUserWidget.h"
#include "Kismet/GameplayStatics.h"
#include "Blueprint/WidgetLayoutLibrary.h"
#include "Components/SizeBox.h"

void USWorldUserWidget::NativeTick(const FGeometry& MyGeometry, float InDeltaTime)
{
	Super::NativeTick(MyGeometry,InDeltaTime);

    //如果血条已经存在,那么就直接返回
	if (!IsValid(AttachedActor))
	{
		RemoveFromParent();

		return;
	}

    //将世界内的3D坐标变成我们屏幕上的2D坐标进行显示
	FVector2D ScreenPosition;
	if (UGameplayStatics::ProjectWorldToScreen(GetOwningPlayer(), AttachedActor->GetActorLocation(), ScreenPosition))
	{
		float Scale = UWidgetLayoutLibrary::GetViewportScale(this);
		
        //匹配不同大小的屏幕
		ScreenPosition /= Scale;

		if (ParentSizeBox)
		{
            //设置sizebox的变换
			ParentSizeBox->SetRenderTranslation(ScreenPosition);
		}
	}
}

在SAICharacter类里面需要注意,我们会调用CreateWidget<>()函数来创建ui,但是记得在创建ui之后要调用AddToViewPort()来添加到我们的视口内。还有一点是,我们需要把所有关于UI的设置都放到AddToViewPort()函数调用之前,否则会出现蓝图的报错说相关参数为空的情况。

蓝图长这样

UE5.1.1 c++从0开始(14.用C++写UMG类)

接着是ui整理的工作,我这里就不细讲了,教程教的很清楚,而且版本之间并没有什么不同的地方

最后是我们接触的控制台,也不是什么太大的问题,只不过是宏内的参数变化了而已,以前我们在UFUNCTION()的括号内填的都是蓝图可调用,默认读写啥的,如果需要把这个函数放在控制台内让我们调用,只需要在在括号内写Exec就行了,然后在相应的.cpp文件里面实现函数,最后在编辑器里面就可以调用我们所写的函数方法了。文章来源地址https://www.toymoban.com/news/detail-512430.html

到了这里,关于UE5.1.1 c++从0开始(14.用C++写UMG类)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5.1.1创建C++工程失败解决办法

    闲来无事,更新了一下UE5.1.1,妈蛋创建C++项目居然失败, 错误截图如下: 妈蛋,后面一堆乱码,鬼知道是啥错误! 咋解决?步步高打火机,直接复制第一段的Running后面的代码到cmd中执行。 这下看的懂了, ‘dotnet’ 不是内部或外部命令,也不是可运行的程序 一般出现xxx不

    2024年02月01日
    浏览(38)
  • UE5.1.1C++从0开始(4.虚幻的接口以及交互功能)

    这一个章节对于第一次接触虚幻的人来说可以说是最绕的一个点,因为老师突然给你塞了很多的概念,对于这一块的学习,我个人的推荐是:先把蓝图搞明白了,再对应到C++的代码中,不然一定会被整的晕头转向。还是,有不懂的点就来问我。 主要有几个大点: 接口 自定义

    2024年02月04日
    浏览(30)
  • UE4和C++ 开发-C++与UMG的交互2(C++获取UMG的属性)

    1、...C++获取UMG的属性 1.1、第一种方法:通过名称获取控件。 优点:可以拿到对象引用,调用系统预定义好的事件(函数)。 缺点:无法拿到在蓝图中创建的属性,可以C++创建控件父类,属性也在C++中定义,这样的话可以拿到。 1.2、第二种方法:通过宏绑定控件 (控件类型

    2024年02月08日
    浏览(30)
  • 【UE5/UE4】【UE C++】制作一个蓝图宏库用以在构造器中Spawn Actor

    实际上该功能可以通过纯蓝图写出,以下展示蓝图中如何操作构造器 仅需在创建\\\"自定义事件\\\"的时候勾选\\\"编辑器中调用\\\"属性,然后就可以直接在蓝图中生成 但同时,我们发现\\\"从类生成Actor\\\"该蓝图节点具有生成局限性 无法在当前关卡外生成 以及无法生成某些在蓝图中公开却不在

    2024年02月14日
    浏览(45)
  • UE5【UMG】 - Simple Menu UI v3 学习笔记

    案例地址:https://www.unrealengine.com/marketplace/zh-CN/product/simple-menu-ui 这个Demo简单,基本结构都有,可以用来入手学习 1) 先查看 Project-MapsModes,找到默认启动Map、GameMode与GameInstance;此外,Input设置也需要看下。 2)当UE5程序启动时,默认启动GameInstance、GameMode与默认Map; 接着,

    2024年02月06日
    浏览(35)
  • UE5基础2-UI简介(UMG)-a.创建和显示UI

            1.在内容浏览器中,点击  新增(Add New)  按钮,在  用户界面  下,选择  控件蓝图                  2.将控件蓝图命名为  SampleUI  ,然后双击打开,打开蓝图时,将显示UMG编辑器界面。 3.右上角切换页面按钮 4.先左键拖进来一个画布面板 鼠标移动到右下角

    2024年01月19日
    浏览(32)
  • UE5 虚幻引擎中UI、HUD和UMG的区别与联系

    🙋‍♂️ 作者:海码007 📜 专栏:UE虚幻引擎专栏 💥 标题:UE5 虚幻引擎中UI、HUD和UMG的区别与联系 ❣️ 寄语:加油,一次专注一件事! 🎈 最后: 文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。 💥在学习虚幻引擎

    2024年01月20日
    浏览(30)
  • UE4,UE5虚幻引擎,怎么在蓝图中获取FPS帧速率,显示在UMG(UI)上

    前言:在UE中可以使用命令行比如stat fps显示帧率,但只是显示在界面,假设我们要在蓝图中获取FPS帧率,并且显示在我们创建的UMG控件蓝图。这种stat fps命令行的形式就不行了,因为它只会固定显示在右上角的位置。 1、在Tick中获取DeltaSeconds,用1除InDeltaTime,得到帧速率。

    2024年02月11日
    浏览(36)
  • Ue5 C++ metahuman

    参考官网: 创建MetaHuman | Epic Developer Community (epicgames.com) 参考: Quixel Bridge中的MetaHuman | Epic Developer Community (epicgames.com) 参考:导出到虚幻引擎5 | Epic Developer Community (epicgames.com) 参考:在Sequencer中使用MetaHuman | Epic Developer Community (epicgames.com) 待补充

    2024年02月10日
    浏览(32)
  • UE5 C++(十七)— 射线检测

    射线检测简单来说就是通过相机发射一条射线,用来检测对象的一种检测机制。 官网介绍:使用射线进行命中判定 这里主要介绍4种常用的射线检测方式。 关键API: LineTraceSingleByChannel 声明变量 MyCharacter.h 在Tick中实现通道进行射线检测 MyCharacter.cpp 编译 之后,在场景中添加

    2024年01月18日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包