41. UE5 RPG 设置火球术的碰撞类型

news2024/9/22 1:17:23

在上一篇中,我们设置了火球术从发射到击中敌人的整个周期使用的音效和特效,现在看上去它像一个真正的火球术了。在这一篇文章里面,我们主要解决一下火球术碰撞的问题,现在已知的问题是,有些不需要和火球产生碰撞的物体(比如药瓶)需要修复,有些场景静态物体无法和火球产生碰撞(比如立柱)都是我们需要解决的。

碰撞预设

碰撞主要分为四个部分:

  1. 碰撞预设:UE内置的碰撞设置,可以一键修改对应的内容。
  2. 设置碰撞:可以根据物理设置碰撞开关,只查询还是会产生碰撞
  3. 对象类型:相当于我们定义的当前物体的类型,对物体进行了分类,方便我们设置物体对不同的类型相应修改。
    在这里插入图片描述
    UE内置了很多的预设,它会将其它三项的修改保存为一个配置项一键切换的快捷键。
    在这里插入图片描述
    设置碰撞可以根据需求进行设置。
    在这里插入图片描述
    对象类型这里,为UE内置的几种,给我们分好的类型,场景内的静态(建筑)和动态物体(药瓶),角色Pawn,模拟物理的类型等等,后面我们也会创建自己的类型。
    在这里插入图片描述
    这里主要分为了两大块,一块是碰撞响应,另一块是对象于其它类型之间的响应。我们可以在项目设置里面增加对应的通道。
    碰撞检测通道主要是用于鼠标拾取时,需要设置对应通道,比如,物体设置Visibility重叠,也就意味着将物体添加到了Visibility响应列表,在射线拾取时,可以节省计算性能。
    物体相应则是物体之间的响应,而且必须要双方都设置成阻挡或重叠才可以实现,单方面无法实现响应。
    在这里插入图片描述
    重叠指两个物体重叠时,并且设置重叠相应,生成重叠事件为true时能够获取到重叠事件回调
    在这里插入图片描述
    阻挡相当于是物体产生碰撞时,将会阻挡住物体继续前进。

创建新的碰撞类型

这里我们实现自定义一个新的碰撞类型,作为火球术使用的类型。
我们找到引擎-碰撞,这里可以添加新的碰撞类型,新的检测通道,以及设置新的预设。
在这里插入图片描述
我们添加一个新的碰撞类型,设置为Projectile
在这里插入图片描述
然后你在重新打开物体的碰撞,会发现,物体增加了对应的类型和碰撞设置
在这里插入图片描述
如果在代码中使用,我们需要先定义,这样方便后面修改,在代码文件夹根目录找到项目的.h文件,这样方便其它文件引用,ECollisionChannel::ECC_GameTraceChannel1代表我们添加的碰撞类型的第一个类型,我们将其定义为自己需要名称。如果列表修改了,我们也只需要修改后面的数字即可。不会去代码里面修改每个名称数字。

#define ECC_PROJECTILE ECollisionChannel::ECC_GameTraceChannel1

有了自定义类型,我们在蓝图中,可以在配置项直接修改它的类型,在代码中将需要使用代码修改
我们在火球的基类发射物类的构造函数这里,创建了碰撞体以后,使用代码设置一下它的碰撞类型即可。

AProjectile::AProjectile()
{
 	... 
	//初始化碰撞体
	Sphere = CreateDefaultSubobject<USphereComponent>("Sphere");
	SetRootComponent(Sphere); //设置其为根节点,
	Sphere->SetCollisionObjectType(ECC_PROJECTILE); //设置发射物的碰撞类型
	...

设置于自定义碰撞类型的重叠事件

如果你在蓝图中设置实现,需要在碰撞体这里开启生成重叠事件,并且将对应项设置为重叠,即可实现事件。
在这里插入图片描述
如果你在代码中设置,那么需要调用对应的函数
比如,我在角色上面,设置了,不会响应相机碰撞,但是对发射物类型产生重叠事件,并开启了重叠事件。

	GetCapsuleComponent()->SetCollisionResponseToChannel(ECC_Camera, ECR_Ignore);
	GetCapsuleComponent()->SetCollisionResponseToChannel(ECC_PROJECTILE, ECR_Overlap); //设置碰撞体可以和发射物产生重叠
	GetCapsuleComponent()->SetGenerateOverlapEvents(true); //设置碰撞体可以生成重叠事件

设置发射物身上的碰撞

在发射物身上,同样需要开启重叠事件,并且要设置查询,将类型设置为我们自定义类型。
在这里插入图片描述
在代码中设置就是如下

	//初始化碰撞体
	Sphere = CreateDefaultSubobject<USphereComponent>("Sphere");
	SetRootComponent(Sphere); //设置其为根节点,
	Sphere->SetCollisionObjectType(ECC_PROJECTILE); //设置发射物的碰撞类型
	Sphere->SetCollisionEnabled(ECollisionEnabled::QueryOnly); //设置其只用作查询使用
	Sphere->SetCollisionResponseToChannels(ECR_Ignore); //设置其忽略所有碰撞检测
	Sphere->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap); //设置其与世界动态物体产生重叠事件
	Sphere->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Overlap); //设置其与世界静态物体产生重叠事件
	Sphere->SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap); //设置其与Pawn类型物体产生重叠事件

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

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

相关文章

同事上班这样摸鱼,我坐边上咋看他都在专心写代码啊

我边上有个同事&#xff0c;我坐他边上&#xff0c;但是每天看着他都眉头紧锁&#xff0c;忙的不亦乐乎&#xff0c;但终于有一天&#xff0c;我发现了他上班摸鱼的秘诀。 我劝你千万不要学会这4招&#xff0c;要不就该不好好上班了。 目录 1 上班看电影&#xff1f; 2 上班…

代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域

代码随想录&#xff08;番外&#xff09;图论3|1020. 飞地的数量|130. 被围绕的区域 1020. 飞地的数量 class Solution { public:int dir[4][2]{0,1,1,0,0,-1,-1,0};int count;void dfs(vector<vector<int>>& grid,int x,int y){grid[x][y]0;count;for(int i…

网站内容下载软件有哪些 网站内容下载软件推荐 网站内容下载软件安全吗 idm是啥软件 idm网络下载免费

一招搞定网页内容下载&#xff0c;并且各大网站通用&#xff01;绕过资源审查&#xff0c;所有网站内容随意下载。解锁速度限制&#xff0c;下载即高速无视网站限速。跳过会员充值&#xff0c;所有VIP资源免费下载。有关网站内容下载软件有哪些&#xff0c;网站内容下载软件推荐…

【数据分析】NumPy

文章目录 [toc]ndarray的创建np.array()方法np.arange()方法np.zeros()方法np.ones()方法np.full()方法np.eye()方法np.random模块np.random.random()方法np.random.randint()方法np.random.choice()方法np.random.shuffle()方法 ndarray的属性ndarray.dtypendarray.ndimndarra…

用数据检验函数正确性,matlab2C

数据存取格式 filename1 g.txt; fid1 fopen(filename1,w); for i 1 : length(g)for j1:size(g,2)if(j1)fprintf(fid1,{%.16f,,g(i,j)); elseif(j>1&&j<151)fprintf(fid1,%.16f,,g(i,j)); elsefprintf(fid1,%.16f},\n,g(i,j));endend%fprintf(fid1,\n…

【小梦C嘎嘎——启航篇】C++特殊类设计

【小梦C嘎嘎——启航篇】C特殊类设计&#x1f60e; 前言&#x1f64c;1.请设计一个类&#xff0c;该类不能被继承2.请设计一个类&#xff0c;只能在堆上创建对象3.请设计一个类&#xff0c;只能在栈上创建对象4.请设计一个类&#xff0c;该类不能发生拷贝5.请设计一个类&#x…

uniapp真机调试无法调用之前页面的方法

在uniapp通过getCurrentPages&#xff08;&#xff09;页面栈调用之前页面方法&#xff0c;h5可生效但app真机调试找不到方法 let pages getCurrentPages()let beforePage pages[pages.length - 3]beforePage.refresh() //真机调试refresh为undefined解决&#xff1a; 后面…

【kettle004】kettle访问本地MySQL数据库并处理数据至execl文件

一直以来想写下基于kettle的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 熟悉、梳理、总结下MySQL关系数据库相关知识体系 kettle访问MySQL数据库并处理数据至execl文件…

Python AI库 Pandas的常见操作的扩展知识

Python AI库 Pandas的常见操作的扩展知识 本文默认读者具备以下技能&#xff1a; 熟悉python基础知识&#xff0c;vscode或其它编辑工具 熟悉表格文件的基本操作 具备自主扩展学习能力 前文中对Pandas的数据结构以及基础操作做了介绍,本文中会在前文的基础上,对常见的操作进…

MATLAB实现果蝇算法优化BP神经网络预测分类(FOA-BP)

果蝇算法&#xff08;Fruit Fly Optimization Algorithm, FFOA&#xff09;是一种启发式优化算法&#xff0c;受果蝇觅食行为的启发。将其应用于优化BP神经网络&#xff0c;主要是为了寻找BP神经网络中的最佳权重和偏置值。以下是一个基本的流程&#xff1a; 初始化&#xff1a…

【C语言】贪吃蛇详解(附源码)

一、贪吃蛇实现效果 【C语言】贪吃蛇&#xff08;控制台&#xff09; 二、源码 &#x1f388;&#x1f388;&#x1f388;Snake 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)&#x1f388;&#x1f388;&#x1f388; 三、如何使用C语言去实现一个贪吃蛇&#xff1f…

1438.绝对差不超过限制的最长连续子数组

显然我们是需要同时维护当前的最大值和最小值,这就需要两个单调队列dq_down(递减排列)一个维护最大值,dq_up(递增排列)一个维护最小值,同样这个是使用我们第二个模板 [left, i]. 只有当left等于某一个dq.front()的时候,才把它pop_front().这就使得对应相同的元素,我们只需要保…

ruoyi-nbcio-plus基于vue3的flowable修正加签与跳转的前端问题

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

IF 27.5|GWAS+图位克隆法,揭秘水稻调控籽粒性状的关键基因

水稻是全球种植最广泛的作物 拥有超过12万个品种 提高粮食品质是当代水稻育种的首要目标 在现代水稻育种中&#xff0c;不同类型的水稻已经被培育出来&#xff0c;比如食用稻和酿酒稻。这些不同类型的水稻具备不同的籽粒特性&#xff0c;其中包括育种过程中选择的不同等位基因…

应用实战|只需几步,即可享有外卖订餐小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序&#xff0c;小程序后端服务使用了MemFire Cloud&#xff0c;其中使用到的MemFire Cloud功能包括&#xff1a; 其中使用到的MemFire Cloud功能包括&#xff1a; 云数据库&#xff1a;存储外卖微信小程序所有数据表的信息。…

OpenHarmony语言基础类库【@ohos.xml (xml解析与生成)】

将XML文本转换为JavaScript对象、以及XML文件生成和解析的一系列接口。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import xml from ohos.xml; XmlSerializer XmlSerializer接口…

可审批可审计追溯的单网络导出文件方案,了解一下

在物理隔离状态下&#xff0c;单网络导出文件是一个重要的安全需求&#xff0c;特别是在处理敏感数据时。在这种环境下&#xff0c;数据导出需要采取特殊的安全措施&#xff0c;以确保数据传输的安全性和合规性。需要考虑以下因素&#xff1a; 安全性&#xff1a;确保传输过程加…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天&#xff1a;滑动窗口和前缀和 这里我参考了西法的博客&#xff0c; 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组&#xff08;困难&#xff09;1109. 航班预订统计(中等) 前四…

netsh int ipv4 show dynamicport tcp动态端口port设置

netsh int ipv4 show dynamicport tcp netsh int ipv4 set dynamicport tcp start4000 num10000

测试下目录显示否

目录 1、安装docker 2、搜索镜像 3、拉取镜像 4、查看镜像列表 5、运行镜像 6、查看运行容器列表 8、命令行连接数据库 1、安装docker 2、搜索镜像 docker search mysql 3、拉取镜像 docker pull mysql 4、查看镜像列表 docker images 5、运行镜像 docker run -p …