虚幻学习笔记16—C++和3DUI(二)

一、前言

        上一篇虚幻学习笔记15—C++和UI(一)中介绍了通过C++代码创建2D的ui,本章主要讲解怎么用C++代码创建3D的UI,在虚幻学习笔记3—UI跟随弹窗这章中讲解了怎样用蓝图创建一个3D的UI,并且和其交互。

        本系列使用的虚幻5.2.1,vs2022。

二、实现

        本案例中通过创建一个第三人称人物头顶的血条案例来进行说明。

2.1、创建3DUI内容

  1、创建一个“My3DWidget”类,在其中创建两个变量,代码如下

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "My3DUI")float CurHealth = 100.0f;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "MyInput")float	MaxHealth = 100.0f;

2、然后创建一个控件蓝图添加一个进度条,如图2.1.1所示,然后将其呈现的宽度和高度设置一

图2.1.1

下,并将其锚点设置为平铺,这样就会将进度条完整的呈现在3DUI区域,不会有间隙等出现。

3、将新建的蓝图的“类设置”中的父类设置为刚刚创建的“My3DWidget”类,并且将进度条的值进行绑定,绑定的蓝图设置如图2.1.2所示,即将当前血量除以最大血量(这一步对于后续显示3D效果没什么影响,不设置也可以)。

2.1.2
2.2、在C++中加载3DUI

1、创建一个Character类,命名为“MyCharacter1”,在这个类里面将加载之前创建的3DUI蓝图,首先需要在头文件中定义该类型的变量,代码如下。

//加载UI的头文件
#include "Components/WidgetComponent.h"//定义的变量//3DUIUPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "My3DUI")UWidgetComponent* My3DUI;

2、然后再在构造函数中加载2.1创建的蓝图,代码如下:其中“"/Script/UMGEditor.WidgetBlueprint'/Game/BluePrint/UI3D.UI3D_C'"为2.1中创建的蓝图的引用,注意后面一定要加上后缀”_C“。

	My3DUI = CreateDefaultSubobject<UWidgetComponent>(TEXT("My3DUI"));My3DUI->SetupAttachment(RootComponent);static ConstructorHelpers::FClassFinder<UUserWidget>tempUICalss(TEXT("/Script/UMGEditor.WidgetBlueprint'/Game/BluePrint/UI3D.UI3D_C'"));My3DUI->SetWidgetClass(tempUICalss.Class);My3DUI->SetRelativeLocation(FVector(0, 0, 100));My3DUI->SetWidgetSpace(EWidgetSpace::Screen);My3DUI->SetDrawSize(FVector2D(400, 20));

3、编译成功后创建一个“MyCharacter1”类型的蓝图“BP_MyCharacter1”,在蓝图中添加一个静态网格,并且将一个人物网格给它并调整其网格和父组件的相对位置,最后将其拖放到场景中运行即可看到3DUI血条始终跟随人物的效果,如图2.2.1所示

图2.2.1

4、如果将屏幕空间设置成场景,代码如下

	My3DUI->SetWidgetSpace(EWidgetSpace::World);

这样3DUI血条不会一直朝向摄像机,会出现看到其侧面设置背面的情况,如图2.2.2所示

图2.2.2

三、总结

3.1、3DUI通过蓝图进行创建,然后在其他类中加载作为子物体,最后呈现也只能创建一个新的蓝图来呈现,这样有点饶,其实把这里的C++类作为模板,蓝图作为实例或对象即可。

3.2、UI的空间包含屏幕和世界两个,呈现的效果是不一样的,屏幕会始终将正面朝向摄像机,世界其正面是固定的,会看到UI的背面和侧面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Tensor张量】AI模型的信息流通货币

官方解释https://www.tensorflow.org/guide/tensor?hl=zh-cn 1.Tensor的概念理解 如果大模型是一个会运行的城市工厂,那么Tensor就是 运输车! 如果大模型是计算机,那么Tensor就是硬盘。 负责深度学习数据的运输和存储!把数据送给AI模型进行训练,AI模型推理后的数据也…

操作系统“文艺复兴”,云数智融合涌现“美第奇效应”

操作系统作为信息技术中的基础软件&#xff0c;是现代计算机的“灵魂”。随着大模型AI推动云计算、大数据、人工智能、物联网和5G等新一代数字技术的飞速融合&#xff0c;现代计算机体系结构和软件架构面临着重大创新机遇期。图灵奖获得者John Hennessy和David Patterson早在20…

探索未来的方向

运维工程师的出路到底在哪里&#xff1f; 随着技术的不断发展和进步&#xff0c;运维行业也在不断演变。对于许多运维人员来说&#xff0c;他们可能会感到困惑&#xff0c;不知道自己的出路在哪里。本文将探讨运维人员未来的发展方向和机会。 首先&#xff0c;对于那些对技术有…

接口测试学习笔记

文章目录 认识urlhttp协议接口规范Postman实现接口测试设计接口测试用例使用软件发送请求并查看响应结果Postman 自动关联Postman如何提交multipart/form-data请求数据Postman如何提交查询参数Postman 如何批量执行用例单接口测试Postman 断言Postman参数化 接口测试自动化requ…

python常用函数汇总

python常用函数汇总 对准蓝字按下左键可以跳转哦 类型函数数值相关函数abs() divmod() max() min() pow() round() sum()类型转换函数ascii() bin() hex() oct() bool() bytearray() bytes() chr() complex() float() int() 迭代和循环函数iter() next() e…

家有一宝,快乐翻倍,最新最全面基于AdGuard Home 自建 DNS 防污染、去广告教程、安装部署详解、优化增强设置详解

家有一宝,快乐翻倍,最新最全面基于AdGuard Home 自建 DNS 防污染、去广告教程、安装部署详解、优化增强设置详解。支持各个客户端,全平台覆盖。 AdGuard Home 部署的方式有很多种,一般二进制文件部署和直接编译到 OpenWrt 系统中是大家所常用的。而博主个人倾向于使用 Dock…

Qt/C++控件设计器/属性栏/组态/可导入导出/中文属性/串口网络/拖曳开发

一、功能特点 自动加载插件文件中的所有控件生成列表&#xff0c;默认自带的控件超过120个。拖曳到画布自动生成对应的控件&#xff0c;所见即所得。右侧中文属性栏&#xff0c;改变对应的属性立即应用到对应选中控件&#xff0c;直观简洁&#xff0c;非常适合小白使用。独创属…

CTF特训(一):ctfshow-RCE挑战

CTF特训(一)&#xff1a;ctfshow-RCE挑战 FLAG&#xff1a;可后来&#xff0c;除了梦以外的地方&#xff0c;我再也没有见过你 专研方向: 代码审计&#xff0c;PHP 每日emo&#xff1a;其实挺迷茫的&#xff0c;不知道该干什么,(骗你的) RCE挑战1 <?phperror_reporting(0)…

数据密钥管理有哪些常见技术

数据密钥管理涉及到许多复杂而重要的技术&#xff0c;以下是一些常见的数据密钥管理技术&#xff1a; 密钥生成技术&#xff1a;这是数据密钥管理的第一步&#xff0c;需要生成安全、随机且唯一的密钥。常见的密钥生成算法包括RSA、ECC(椭圆曲线密码学)等。这些算法能够生成长度…

EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!

漏洞背景&#xff1a; 1.何为永恒之蓝&#xff1f; 永恒之蓝&#xff08;Eternal Blue&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子…

ubuntu20.04 conda环境配置Mask2former记录

建议先看完再按照步骤安装 代码地址&#xff1a;GitHub - facebookresearch/Mask2Former: Code release for "Masked-attention Mask Transformer for Universal Image Segmentation" 一、配置环境 1、创建虚拟环境 conda create -n mask2former python3.8conda …

2015年第四届数学建模国际赛小美赛B题南极洲的平均温度解题全过程文档及程序

2015年第四届数学建模国际赛小美赛 B题 南极洲的平均温度 原题再现&#xff1a; 地表平均温度是反映气候变化和全球变暖的重要指标。然而&#xff0c;在以前的估计中&#xff0c;在如何界定土地平均数方面存在一些方法上的差异。为简单起见&#xff0c;我们只考虑南极洲。请建…

mysql-exporter监控部署(k8s内)tensuns专用

一、前言 在k8s内部署mysql-exporter监控需要用到deployment、service服务 二、部署 在被监控的mysql中创建监控用户 mysql -u root -p GRANT PROCESS, REPLICATION CLIENT ON *.* TO monitor% identified by 12345678; flush privileges; 创建mysql-exporter服务的yaml文件存…

微信小程序预览pdf,修改pdf文件名

记录微信小程序预览pdf文件&#xff0c;修改pdf名字安卓和ios都可用。 1.安卓和苹果的效果 2.需要用到的api 1.wx.downloadFile wx.downloadFile 下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求&#xff0c;返回文件的本地临时路径 (本地路径)&#xff0c;单次下载…

振弦采集仪在地铁隧道施工监测中的应用与分析

振弦采集仪在地铁隧道施工监测中的应用与分析 振弦采集仪是一种常用的地铁隧道施工监测工具&#xff0c;它通过测量隧道结构中的振弦变化来判断隧道施工的稳定性和安全性。振弦采集仪的应用与分析可以帮助工程师监测地铁隧道施工过程中的变化&#xff0c;及时发现可能的问题并…

test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比

拓展阅读 test-01-java 单元测试框架 junit 入门介绍 test-02-java 单元测试框架 junit5 入门介绍 test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比 test assert-01-Google Truth 断言 test 系统学习-03-TestNG Spock testng 入门使用教程 开源…

什么是IO,初级Java怎么更好的理解IO流(上)

&#xff08;注&#xff1a;本篇文章分为两个部分&#xff0c;如果想更为深刻的了解IO&#xff0c;请关注下一篇&#xff1b;欢迎大家学习讨论和批评指正&#xff09; IO1 作用 将数据在虚拟机内存和本地磁盘之间进行传输 I&#xff1a;input 输入 O&#xff1a;output 输…

阿里云ECS云服务器优势整理(共9点)

为什么选择阿里云服务器ECS&#xff1f;选择云服务器ECS&#xff0c;可以轻松构建具有以下九大优势的计算资源&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云官网关于云服务器ECS的九大优势&#xff1a; 无需自建机房&#xff0c;无需采购以及配置硬件设施。分钟级交付…

c++学习笔记(12)-traits

1、概念 C 中的 type traits 是一种模板元编程技术&#xff0c;用于在编译期间判断、查询类型的属性。Type traits 可以帮助程序员在编译时进行类型判断&#xff0c;而不是在运行时判断&#xff0c;避免了程序中的不必要开销&#xff0c;并且可以提供更好的类型安全性。 2、用…

探索 WebRTC:数字世界的实时通信魔法

前言 在当今日常生活中&#xff0c;我们期望能够随时随地与朋友、同事或家人进行实时沟通。WebRTC&#xff08;Web实时通信&#xff09;技术就像一种魔法&#xff0c;让这些交流变得无比便捷&#xff0c;而且完全在浏览器中实现&#xff0c;无需下载任何额外应用或插件。 Web…