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

news2024/9/26 1:23:03

一、前言

        上一篇虚幻学习笔记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"

//定义的变量
	//3DUI
	UPROPERTY(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.coloradmin.cn/o/1324002.html

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

相关文章

Hive参数操作和运行方式

Hive参数操作和运行方式 1、Hive参数操作 1、hive参数介绍 ​ hive当中的参数、变量都是以命名空间开头的&#xff0c;详情如下表所示&#xff1a; 命名空间读写权限含义hiveconf可读写hive-site.xml当中的各配置变量例&#xff1a;hive --hiveconf hive.cli.print.headert…

abpvnext框架的项目部署到linux arm64版的docker中

参考&#xff1a; windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客 前提条件&#xff1a; 1、vs2022&#xff0c;我的电脑本机安装有windows版docker desktop 。 2、linux中已经安装好docker&#xff0c;安装了sftp。这部分可以自行…

vue proxy代理 和 Nginx 配置跨域

vue.config.js文件中配置的代理&#xff1a; devServer: {port: 9095,// open: true, // 配置项目在启动时自动在浏览器打开proxy: {/yh: { // /api是代理标识&#xff0c;一般是每个接口前的相同部分target: "http://192.168.5.58:8002", // 请求地址&#xff0c;一…

2023年12月GESP认证Scratch图形化等级考试(四级)真题试卷

2023年12月GESP认证Scratch图形化等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;27 总分数&#xff1a;100 选择题 第 1 题 单选题 现代计算机是指电子计算机&#xff0c;它所基于的是&#xff08; &#xff09;体系结构 A. 艾伦图灵 B. …

Kafka为什么能高效读写数据

1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高&#xff08;生产消费方并行度高&#xff09;&#xff1b; 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff1b; 3&#xff09;顺序写磁盘&#xff1b; …

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

知乎上高频提问:Redis到底是单线程还是多线程程序?

1.概述 这里我们先给出问题的全面回答&#xff1a;Redis到底是多线程还是单线程程序要看是针对哪个功能而言&#xff0c;对于核心业务功能部分(命令操作处理数据)&#xff0c;Redis是单线程的&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff…

Potplayer播放器远程访问群晖WebDav本地资源【内网穿透】

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是&#xff1a;1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav3 内网穿透&#xff0c;映射至公网4 使用固定地址在potplayer访问webdav 国内流媒体平台的内容…

node.js mongoose aggregate

目录 官方文档 简述 Aggregate的原型方法 aggregate进行操作 官方文档 Mongoose v8.0.3: Aggregate 简述 在 Mongoose 中&#xff0c;Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具&#xff0c;可以用于对集合中的文档进行变换和…

智慧安防视频监控EasyCVR如何通过回调接口向第三方平台推送RTSP视频通道离线通知

安防视频监控系统EasyCVR能在局域网、公网、专网等复杂的网络环境中部署&#xff0c;可支持4G、5G、WiFi、有线等方式进行视频的接入与传输、处理和分发。平台能将接入的视频流进行汇聚、转码、多格式输出和分发&#xff0c;具体包括&#xff1a;RTMP、RTSP、HTTP-FLV、WebSock…

微信视频号本地生活服务商如何申请,最新方法来了

随着某平台的本地生活服务商被清退&#xff0c;大量的服务商开始想着如何转型&#xff0c;但辛苦一年打下来的商家资源&#xff0c;如何才能效果最大化&#xff1f;最好的方式就是重新找一个平台进行接盘。 随着视频号本地生活业务的开展&#xff0c;这一下就受到广大创业者&a…

linux运维面试题

linux运维面试题 面试 K8S篇(高可用) Q&#xff1a;k8s是什么&#xff1f;架构&#xff1f; Kubenetes是一个开源的容器集群管理系统。主要用于容器编排&#xff0c;解决容器调度问题。当应用请求时&#xff0c;k8s需要合理分配请求到空闲node节点上去。k8s使用的主从模式&…

《Linux C编程实战》笔记:进程操作之ID,优先级

获得进程ID getpid函数 这个函数都用了很多次了&#xff0c;看一下定义和例子就行了 #include<sys/types.h> #include <unistd.h> pid_t getpid(void); 示例程序1 #include<cstdlib> #include<malloc.h> #include<cstring> #include <cs…

中国社科院与新加坡新跃社科联合培养工商管理博士

全球经济正在经历由科技进步与创新、政治和人口的剧烈变化所带来的巨大不确定性与挑战。企业的领导者和管理者需要发展出战略性思维和全球洞察力以便面对越来越大的经济波动。中国社科院与新加坡新跃社科联合培养工商管理博士项目的训练能够让学生在一个企业和组织的改变和发展…

快速给SOLIDWORKS工程图添加水印

水印常见于电子文档或纸质上的文字或图案&#xff0c;日常生活中&#xff0c;一些特殊的水印只能在特定的条件下才能看到。水印可以作为一个品牌的象征&#xff0c;有的软件生成文档就会有水印&#xff0c;可以作为宣传&#xff0c;让更多的人熟知。 作品水印&#xff0c;就是…

app测试必掌握的核心测试:UI、功能测试!

一、UI测试 UI即User Interface (用户界面)的简称。UI 设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由、充分体现软件的定位和特点。手机APP从启动界面开始, 到运行过程,直至退出,…

为什么要编写测试用例,测试用例写给谁看?

“为什么要编写测试用例&#xff0c;测试用例写给谁看”&#xff0c;这个问题看似简单&#xff0c;但却涵盖了一系列复杂的考虑因素&#xff0c;并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”&#xff0c;我将通过以下5个方面进行展开&…

【工具使用-ADB】小米手机如何使用adb传输文件

一&#xff0c;简介 本文主要介绍&#xff0c;如何使用小米手机&#xff0c;打开adb设置进行文件的传输。供参考 二&#xff0c;操作步骤 2.1 进入开发者模式 “设置”->“我的设备”->“全部参数信息” 连续多次点击“MIUI 版本”&#xff0c;直到提示“您已处于开…