当前位置: 首页 > news >正文

unreal 5 实现角色拾取功能

要实现角色拾取功能,我们需要实现蓝图接口功能,蓝图接口主要提供的是蓝图和蓝图之间可以通信,接下来,跟着教程,实现一下角色的拾取功能。
首先,我们要实现一个就是可视区的物品在朝向它的时候,会有一个描边效果,先说一下这个功能的实现逻辑:

  1. 创建一个蓝图接口,蓝图接口内增加两个函数显示描边和隐藏描边。
  2. 创建一个可视区物品的父类,添加蓝图接口,然后制作这两个接口函数的实现
  3. 在角色蓝图中,去获取应该设置描边的模型,然后调用接口,去实现效果。
  4. 最后创建后处理,通过后处理去实现模型的描边渲染效果。
    这样就实现了需要拾取的物品高亮显示的效果。

创建蓝图接口

右键创建蓝图接口
在这里插入图片描述
然后再蓝图接口中,定义三个函数,不需要实现,只需要定义函数名
在这里插入图片描述
就创建完成了蓝图接口内容,函数的实现,我们在蓝图里面实现即可。

创建可拾取物品的蓝图父类

首先创建一个可以拾取的物品的蓝图父类,父类里面,我们需要创建两个组件,一个是用于显示模型的骨骼网格体组件,另一个是用于碰撞检测的球型碰撞体
在这里插入图片描述
在类设置里面设置
在这里插入图片描述

在项目设置中,找到碰撞,设置一个新通道 Pickup,用于相应拾取通道,默认值为忽略,只有在对象碰撞上面开启了碰撞,才会在这个通道产生作用,也是为了性能考虑
在这里插入图片描述
然后将拾取蓝图的父类的球体碰撞体的碰撞属性里面的这个通道设置成阻挡
在这里插入图片描述
在事件里面,鼠标右键,实现描边的函数创建,注意是添加事件,不是调用函数或者调用函数接口
在这里插入图片描述
将函数创建完成
在这里插入图片描述
然后制作对函数的实现,这里的函数,其实只是实现了对模型的自定义深度渲染的开关。原因在于描边的实现也是根据深度进行的描边绘制。
在这里插入图片描述

在角色蓝图中实现模型检测功能

首先在角色蓝图中创建一个拾取范围检测的函数,这个函数是基于相机视角进行拾取的,根据相机位置和相机朝向,可以创建一个范围,然后按通道进行球型拾取,会生成一个胶囊体的区域,将拾取结果返回。注意,通道拾取的通道是我们上面刚创建的Pickup通道,这样可以减少拾取内容。
在这里插入图片描述
这里我debug了一下, 可以看一下拾取区域具象化
在这里插入图片描述
接下来,我们要对拾取到的物体进行逻辑判断,实现一个拾取物体描边效果事件。事件首先调用函数,获取拾取结果。然后判断是否拾取到物体
在这里插入图片描述
如果没有拾取到,我们将取消所有物体的描边,主要是为了bug,其实如果处理的好,只需要将上一次拾取到的描边取消就行了,取消描边其实就是调用接口事件,然后拾取物体那边的事件就能够被调用触发。
在这里插入图片描述

如果拾取到了,就要判断是否和上一次拾取到的是否相同
在这里插入图片描述
如果相同,则不用处理,不同的话,先把之前的描边关闭,然后重新设置变量,并设置新的变量对象模型的描边效果
在这里插入图片描述
最后,这个在每一帧调用,即可实现。
在这里插入图片描述

添加后处理实现描边

首先添加一个后处理体积
在这里插入图片描述
将后处理范围设置为全局
在这里插入图片描述
添加后处理相关材质,用于实现后处理渲染
在这里插入图片描述

创建一个拾取物品子类

添加模型,并调整位置
在这里插入图片描述
设置碰撞球体的半径
在这里插入图片描述
然后放到场景内测试
在这里插入图片描述

创建拾取物品的类别

接着,后面我们需要实现将物体附加到角色身上,那么我们需要确定物品的类型以及所需的数据。
首先,我们需要创建一些枚举
在这里插入图片描述
这些枚举能够实现在角色事件中判断当前拾取的物件到底是个什么东西。
然后我们还需要一个结构体,用于存储上面的枚举类型还有一些附加到角色身上的数据
在这里插入图片描述
PickupType 拾取类型为判断当前为武器或者身上的衣物
WeaponType 武器类型为判断是什么类型的武器,拾取类型为武器时,才会有用
ClothesType 衣服类型为判断物品附加到身上的什么部位,拾取类型为衣服是起作用。
Mesh 骨骼网格体位衣服的骨骼网格体,如果是衣服的某个部位,只需要将衣服附件到角色身上,所以只需要在这里设置即可。
Class 类为实例化武器的类,用于实例化武器即可,我们之前创建的武器都是通过类实例化的。

所以,如果是一个衣服物件 我们需要设置PickupType ClothesType Mesh
如果是一个武器 我们需要设置 PickupType WeaponType Class
有了这些内容,我们就可以实现将拾取的物品附加到角色身上。

拾取功能的实现

在增强输入中增加一个输入
在这里插入图片描述
在角色蓝图中设置拾取事件,首先判断状态,我们之前实现了描边功能时,已经保存到了变量里,只需要判断变量里面的内容是否存在即可,然后发送事件通知。
在这里插入图片描述
在拾取物品父类里面,我们要在里面调用父类实现将拾取物品数据传递给角色蓝图,并在角色动画播放到拾取时,将自身销毁掉。
在这里插入图片描述
在角色蓝图里面,首先设置变量
在这里插入图片描述
这种方式是比较简单的方式,其实可以直接将整个结构体存下来比较好,然后在使用的地方break结构体获取数据。
然后修改状态,并设置动画蓝图为拾取状态
在这里插入图片描述
然后设置两个队列,第一个队列实现拾取逻辑,在拾取的一瞬间,调用附加到身体上函数。另一个队列则是在退出动画时,退出拾取状态
在这里插入图片描述

物品附加到角色身上逻辑

实现物品逻辑附加到角色身上,首先需要判断当前是何物品
在这里插入图片描述
如果是身上的衣服,我们只需要将衣服的网格体放置到对应的部位
在这里插入图片描述
能实现这个,首先角色模型下面有相应的模型部位
在这里插入图片描述
然后还设置了相应的事件能够让骨骼组件去更新当前模型
在这里插入图片描述
而在武器这里,我们之前创建过武器的类,并且将武器直接创建到了角色身上,现在,需要修改为拾取功能,所以,将武器附加的那套,不可以直接事件开始时运行,而是,修改为在拾取时运行
在这里插入图片描述
然后运行之前书写的那一套逻辑即可,区别就是修改了参数。
在这里插入图片描述
这里只是实现一下附加的简单实现,实际项目中还有很多数据判断,甚至和ui之间的交互,毕竟拾取背包增加身上物品容量,拾取衣物增加防御等

拾取动画实现

在拾取动画里面,使用了一个混合空间,主要是为了实现拿着武器和不拿武器播放的动画不同,站立和蹲着播放的也不相同,所有,实现了四个动画的混合,然后根据判断实现。并且将动画的播放事件都调整成了固定时间,这样方便退出拾取状态时,动画都是一同播放完成的。
在这里插入图片描述
然后再功能状态机里,创建一个切换到拾取状态。切换条件是由是否拾取的状态判断。
在这里插入图片描述
有可能遇到每次拾取未完成时,又进入了拾取状态,所以在状态上面配置项上每次进入从新开始播放
在这里插入图片描述
状态里,播放拾取动画,使用之前设置好的拾取动画,由于使用的混合空间,需要设置是否站立和是否持有武器,这里我使用布尔值变换浮点数的方式实现,布尔值转换数字,false就是0,true就是1
在这里插入图片描述
这就是拾取功能的大概逻辑。

相关文章:

unreal 5 实现角色拾取功能

要实现角色拾取功能,我们需要实现蓝图接口功能,蓝图接口主要提供的是蓝图和蓝图之间可以通信,接下来,跟着教程,实现一下角色的拾取功能。 首先,我们要实现一个就是可视区的物品在朝向它的时候,会…...

chatgpt赋能python:如何使用Python升序排列一个列表?

如何使用Python升序排列一个列表? 在Python编程中,我们经常需要对列表进行排序。列表排序是一种常见的操作,可以帮助我们对数据进行分析和管理。在这篇文章中,我们将学习如何使用Python对一个列表进行升序排列。 什么是升序排列…...

Lecture 20 Topic Modelling

目录 Topic ModellingA Brief History of Topic ModelsLDAEvaluationConclusion Topic Modelling makeingsense of text English Wikipedia: 6M articlesTwitter: 500M tweets per dayNew York Times: 15M articlesarXiv: 1M articlesWhat can we do if we want to learn somet…...

ThreadPoolExecutor线程池

文章目录 一、ThreadPool线程池状态二、ThreadPoolExecutor构造方法三、Executors3.1 固定大小线程池3.2 带缓冲线程池3.3 单线程线程池 四、ThreadPoolExecutor4.1 execute(Runnable task)方法使用4.2 submit()方法4.3 invokeAll()4.4 invokeAny()4.5 shutdown()4.6 shutdownN…...

chatgpt赋能python:Python实践:如何升级pip

Python实践:如何升级pip Python作为一门高效的脚本语言,被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具,是开发Python应用的必备工具。但是pip在使用过程中,有时候会出现版本不兼容或者出现漏洞等…...

【JavaEE进阶】mybatis

目录: 一、Mybatis是什么 三个映射关系如下图: 二、mybatis的使用(前置工作简单案例) 第一步:导入MAVEN依赖 第二步: 在spring项目当中新建数据源 第三步:新建一个实体类,是和…...

Redis的大key

什么是 redis 的大 key redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值,而是该 key 所对应的 value 过大对于 string 类型来说,一般情况下超过 10KB 则认为是大 key;对于set、zset、hash 等类型来说,一般…...

MMPretrain

title: mmpretrain实战 date: 2023-06-07 16:04:01 tags: [image classification,mmlab] mmpretrain实战 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccTl9bOl-1686129437336)(null)] 主要讲解了安装,还有使用教程.安装教程直接参考官网.下面讲…...

栈和队列(数据结构刷题)[一]-python

文章目录 前言一、原理介绍二、用栈实现队列1.操作2.思路 三、关于面试考察栈里面的元素在内存中是连续分布的么? 前言 提到栈和队列,大家可能对它们的了解只停留在表面,再深入一点,好像知道又好像不知道的感觉。本文我将从底层实…...

【备战秋招】JAVA集合

集合 前言 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要 对对象进行存储。 另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多…...

setState详解

this. setState( [partialState], [callback]) 1.[partialState] :支持部分状态更改 this, setState({ x:100 //不论总共有多少状态,我们只修改了x,其余的状态不动 });callback :在状态更改/视图更新完毕后触发执行,也可以说只要执行了setS…...

Qt5.12.6配置Android Arm开发环境(windows)

1. 安装jdk1.8 2.安装Android Studio 并安装 SDK 与NDK SDK Tools 选择 26.0.3 SDK Platform 选择 Android SDK Platform 26 NDK选择19版本 安卓ARM环境配置成功如下: JDK1.8 , SDK 26 , NDK 19 在安装QT时要选择 ARMv7(32位CPU)与ARM64-v8a(64位CPU) 选择支持android平台…...

七、进程程序替换

文章目录 一、进程程序替换(一)概念(二)为什么程序替换(三)程序替换的原理(四)如何进行程序替换1. execl2. 引入进程创建——子进程执行程序替换,会不会影响父进程呢? &…...

C++核心编程——详解运算符重载

文章目录&#x1f4ac; 一.运算符重载基础知识①基本概念②运算符重载的规则③运算符重载形式④运算符重载建议 二.常用运算符重载①左移(<<)和右移(>>)运算符重载1️⃣重载后函数参数是什么&#xff1f;2️⃣重载的函数返回类型是什么&#xff1f;3️⃣重载为哪种…...

2023年前端面试汇总-CSS

1. CSS基础 1.1. CSS选择器及其优先级 对于选择器的优先级&#xff1a; 1. 标签选择器、伪元素选择器&#xff1a;1&#xff1b; 2. 类选择器、伪类选择器、属性选择器&#xff1a;10&#xff1b; 3. id 选择器&#xff1a;100&#xff1b; 4. 内联样式&#xff1a;1000&a…...

Java调用Pytorch实现以图搜图(附源码)

Java调用Pytorch实现以图搜图 设计技术栈&#xff1a; 1、ElasticSearch环境&#xff1b; 2、Python运行环境&#xff08;如果事先没有pytorch模型时&#xff0c;可以用python脚本创建模型&#xff09;&#xff1b; 1、运行效果 2、创建模型&#xff08;有则可以跳过&#xf…...

【EasyX】实时时钟

目录 实时时钟1. 绘制静态秒针2. 秒针的转动3. 根据实际时间转动4. 添加时针和分针5. 添加表盘刻度 实时时钟 本博客介绍利用EasyX实现一个实时钟表的小程序&#xff0c;同时学习时间函数的使用。 本文源码可从github获取 1. 绘制静态秒针 第一步定义钟表的中心坐标center&a…...

基于XC7Z100的PCIe采集卡(GMSL FMC采集卡)

GMSL 图像采集卡 特性 ● PCIe Gen2.0 X8 总线&#xff1b; ● 支持V4L2调用&#xff1b; ● 1路CAN接口&#xff1b; ● 6路/12路 GMSL1/2摄像头输入&#xff0c;最高可达8MP&#xff1b; ● 2路可定义相机同步触发输入/输出&#xff1b; 优势 ● 采用PCIe主卡与FMC子…...

Kibana:使用 Kibana 自带数据进行可视化(一)

在今天的练习中&#xff0c;我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。 前提条件 如果你还没有安装好自己的 Elastic Stack&#xff0c;你可以参考如下的视频来开启 Elastic Stack 并进行下面的练习。你可以开通阿里云检…...

MySQL数据库基础 07

第七章 单行函数 1. 函数的理解1.1 什么是函数1.2 不同DBMS函数的差异1.3 MySQL的内置函数及分类 2. 数值函数2.1 基本函数2.2 角度与弧度互换函数2.3 三角函数2.4 指数与对数2.5 进制间的转换 3. 字符串函数4. 日期和时间函数4.1 获取日期、时间 4.2 日期与时间戳的转换 4.3 获…...

JVM | JVM垃圾回收

JVM | JVM垃圾回收 1、堆空间的基本结构2、内存分配和回收原则2.1、对象优先在 Eden 区分配2.2、大对象直接进入老年代2.3、长期存活的对象将进入老年代2.4、主要进行 gc 的区域2.5、空间分配担保3、死亡对象判断方法3.1、引用计数法3.2、可达性分析算法3.3、引用类型总结3.4、…...

avive零头撸矿

Avive 是一个透明的、自下而上替代自上而下的多元网络&#xff0c;旨在克服当前生态系统的局限性&#xff0c;实现去中心化社会。 aVive&#xff1a;一个基于 SBT 和市场的 deSoc&#xff0c;它使 dapps 能够与分散的位置 oracle 和 SBT 关系进行互操作。您的主权社交网络元宇宙…...

openGauss5.0之学习环境 Docker安装

文章目录 0.前言1. 准备软硬件安装环境1.1 软硬件环境要求1.2 修改操作系统配置1.2.1 关闭操作系统防火墙 1.3 设置字符集参数1.4 设置时区和时间&#xff08;可选&#xff09;关闭swap交换内存1.5 关闭RemoveIPC1.6 关闭HISTORY记录 2. 容器安装2. 1支持的架构和操作系统版本2…...

数据可视化大屏人员停留系统的开发实录(默认加载条件筛选、单击加载、自动刷新加载、异步加载数据)

项目需求 录入进入房间的相关数据&#xff1b;从进入时间开始计时&#xff0c;计算滞留房间的时间&#xff1b;定时刷新数据&#xff0c;超过30分钟的人数&#xff0c;进行红色告警&#xff1b; 实现流程 为了完整地实现上述需求&#xff0c;我们可以按照以下步骤开发&#…...

【Linux】-关于调试器gdb的介绍和使用

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 文章目录 前言一、Linux中的debug和release二、gdb的使用**1.进入调试****2.显示代码*…...

项目开发经验

hadoop 1.namenode中有专门的工作线程池用于处理与datanode的心跳信号 dfs.namenode.handler.count20 * log2(Clust 2.编辑日志存储路径 dfs.namenode.edits.dir 设置与镜像文件存储路径 dfs.namenode分开存放&#xff0c;可以达到提高并发 3.yarn参数调优&#xff0c;单个服…...

STM32——05-按键、时钟控制、中断复位 点亮LED灯

如何点亮一颗LED灯 编程实现点灯 常用的 GPIO HAL 库函数&#xff1a; void HAL_GPIO_Init ( GPIO_TypeDef * GPIOx , GPIO_InitTypeDef * GPIO_Init ); void HAL_GPIO_WritePin ( GPIO_TypeDef * GPIOx , uint16_t GPIO_Pin , GPIO_PinState PinState ); void HAL_GPIO_Togg…...

VBA下载二进制文件,文本读写

这里使用了vba如下两个对象&#xff1a; Microsoft.XMLHTTP&#xff1a;文件读写&#xff0c;可读写二进制&#xff0c;可指定编码,对于utf-8编码文本文件使用FSO的TextStream对象打开&#xff0c;读取到的内容可能会出现乱码&#xff0c;可以使用该对象打开;前期绑定添加引用…...

MongoDB结合Robo 3T 1.4.3的简单操作

MongoDB的简单操作结合Robo 3T 1.4.3工具进行查询。 常用的正则表达式 /* 29 */ 正则表达式 /\* [0-9]* \*/ "_id" : ObjectId("5f3d05cdfd2aa9a8a7"), 正则表达式 \"([^\"]*_id)\".*, 使用方法&#xff1a;查询结果去掉注释和不需要…...

【学习笔记】[AGC048D] Pocky Game

这是一个非平等博弈。但是只要求你判断胜负&#xff0c;本身也不是一道结论题&#xff0c;所以可以用 D P DP DP来解决。 结论&#xff1a;第一堆石子剩的越多&#xff0c;先手玩家获胜的概率越大。这直接引出了一个非常感性的结论&#xff1a;每次取石子时要么取一堆&#xf…...

沧州住房和城乡建设部网站/百度推广优化师

下列表格中除了个别函数外&#xff0c;其余函数都是图像处理工具箱提供的关于图像处理的函数&#xff0c;现摘录到此以备查找。 表1 图像显示函数名功能说明函数名功能说明colorbar颜色条显示montage按矩形剪辑方式显示多帧图像getimage从坐标系中获取图像数据immovie从多帧索引…...

一些js特效的网站推荐/西地那非

转载自点击打开链接 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(d…...

技术支持 东莞网站建设电脑回收/天津百度seo排名优化

内容安全策略&#xff08;CSP&#xff09;是一个增加的安全层&#xff0c;可帮助检测和缓解某些类型的攻击&#xff0c;包括跨站点脚本&#xff08;XSS&#xff09;和数据注入攻击。这些攻击用于从数据窃取到站点破坏或恶意软件分发的所有内容&#xff08;深入CSP&#xff09; …...

凡科网站模板/又一病毒来了比新冠可怕

前言 之前我有整理过一系列文章“支付功能如何测试&#xff1f;”&#xff0c;“抖音直播要如何测试”&#xff0c;“微信红包如何测试”&#xff0c;很多学生说是及时雨&#xff0c;帮助了他们的测试面试&#xff0c;需要的同学可以点击查看&#xff08;附上文章链接&#xf…...

黑龙江能源建设网站/最新的疫情情况

jupyter notebook 需要用谷歌浏览器打开才可以&#xff0c;其他的浏览器打开后多半是空白的。添加默认浏览器如下&#xff1a; 1.在anaconda prompt 里面直接输入 jupyter notebook --generate-config 让jupyter生成一个配置文件&#xff0c;生成后你会看到文件地址的2.然后就可…...

wordpress模块管理系统/在线制作网站免费

10月25日&#xff0c;“电子信息系AAA软件特色专业java知识竞赛”在实验楼二楼阶梯教室圆满落下帷幕&#xff0c;我系合作办学AAA特色专业2015级四个班级近200名学生参加了本次活动。AAA教育新乡基地负责人郎建辉、辅导员刘瑞姣、教员王和超和康一等老师出席评选本次比赛&#…...