虚幻学习笔记14—重叠和碰撞事件

一、前言

        在开发应用当中两个物体的重叠和碰撞事件会经常用到,在虚幻中哲两个有很大的区别,在官方文档碰撞概述其实已经讲了怎样发生碰撞和重叠,但是还是遗漏不少注意事项合细节,主要文档写的太粗糙了,这也让我在使用的时候产生了很多困惑,尤其是碰撞。

        本文使用的虚幻引擎版本为5.2.1。

二、实现

        首先创建两个蓝图,分别添加Cube和Plane组件,Cube作为主动接触的一方,Plane作为被动的一方。

2.1、实现重叠事件

1、要发生重叠最重要的是两个物体都要设置“生成重叠事件”和选择带“查询”的碰撞已启用

        如2.1.1所示,将两个蓝图的这个都勾上,这点和碰撞是最大的不同,两个物体都要在碰撞预设-》碰撞已启用中设置带有”查询“的选项,如“纯查询”、“已启用碰撞(查询和物理)”、”查询和探测”。这两个物体可以在上述三种带查询中任意选择,可以不用两个完全一样,如Cube选择“纯查询”,Plane可以在“纯查询”、“已启用碰撞(查询和物理)”、”查询和探测”任意选择一个都会发生重叠事件。

Cube的设置
Plane的设置
图2.1.1

2、检测响应中其中一个设置了和对方的重叠,另外一个需要设置和该物体的非忽略即可

        两个物体只要有一个设置了和另外物体的重叠,另外一个物体除非设置忽略,那么可以触发重叠事件,并且两个物体都能触发事件处理。

        如2.1.2所示为两个物体的设置,其中Cube的对象类型为WolrdDynamic、Plane为Physics Body。Cube的检测响应中针对PhysicsBody设置为重叠,而Plane中设置检测想要中针对WolrdDynamic的类型除了忽略可以设置为重叠和阻挡。

Cube设置和Plane重叠
Plane设置和Cube的重叠或阻挡
图2.1.2

3、两个物体都可以接受到重叠事件,但是执行的前后顺序会和谁撞谁有关

        在处理重叠事件中,两个物体都可以创建“组件开始重叠时”的事件并进行处理,如图2.1.3所示分别在两个物体中处理该事件。但是在执行顺序上会有所差别,如果是Cube撞上Plane,那么就会

Cube中打印“我是Cube”
Plane中打印“我是Plane”
图2.1.3

先执行Cube中的事件,然后再执行Plane上的事件,反之则相反。如同2.1.4所示。但是如果两个都运动的话,以谁速度快就先执行对方。注:打印屏幕上的消息是在上面的后执行、最下面的是先执行的。

图2.1.4
2.2、实现碰撞事件

        碰撞是比较复杂的,相比重叠来说它需要注意的事情就更多。

1、两个物体的“碰撞已启用”都要设置带物理的选项

        两个物体的“碰撞已启用”都要设置带物理的选项,如“纯物理”、“已启用碰撞”,这两个可以任意组合,比如Cube选择了“纯物理”,plane可以选择“纯物理”或“已启用碰撞”,如图2.2.1所示

Cube选择了“纯物理”
Plane选择“已启用碰撞”
图2.2.1

2、两个物体针对对方的检测响应必须都是阻挡

        如图2.2.2所示,两个物体的检测响应针对对方的都必须是阻挡。

Cube针对Plane的设置为阻挡
Plane针对Cube的设置为阻挡
图2.2.2

3、其中一个必须开启“模拟生产命中事件”

        其中一个物体必须开启,开启后会自动触发“组件命中时”事件,没有勾选该项的不会出发“组件命中时”事件。如图2.2.3所示为两个物体我都勾选并在事件处理中打印Debug信息。

Cube勾选事件并处理

Plane勾选时间并处理
图2.2.3

4、其中一个必须开启“模拟物理“

        这是碰撞最难以把握的一点,Cube勾选“模拟物理”,Plane不勾选“模拟物理”。这一点在官方文档中是没有提及的,也是让我在头疼不已中才发现的最重要的一点。

5、触发碰撞的事件顺序好像和谁的没有关系

        无论我试了什么情况都是先执行Cube上的事件,然后再执行Plane的事件,但是我概关闭再次重启整个编辑器之后又是相反的结果,这也是最诡异的地方。

三、总结

3.1、要发生重叠最重要的是两个物体都要设置“生成重叠事件”。

3.2、重叠的两个物体的处理事件先后顺序有规律,碰撞的暂时没什么规律。

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

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

相关文章

CSS的三大特性(层叠性、继承性、优先级---------很重要)

CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠性 场景:相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突 的问题 原则:  样式冲突&am…

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱?Java日志框架系列,清晰简洁整理好整个Java的日志框架体系。第一篇,JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题: 日志是用来记录应用的一些运行…

uniapp实现检查版本检测,更新

1.首先需要获取当前app的版本 const systemInfo uni.getSystemInfoSync();// 应用程序版本号// #ifdef APPme.version systemInfo.appWgtVersion;// #endif// #ifdef H5me.version systemInfo.appVersion;// #endif2.在获取到服务器保存的app版本 3.点击按钮验证版本号 //…

Docker单机部署OceanBase

文章目录 说明机器软硬件要求指导文档本次部署环境说明 OceanBase单机部署(Docker)一:拉取 OceanBase 数据库相关镜像二:启动 OceanBase 数据库实例完整启动日志展示 三:连接实例遇到报错:没有mysql客户端 …

关联规则 python实现Apriori算法

python实现Apriori算法 根据我们上个博客的例子 def load_dataset():# 载入数据集的函数dataset [[A, , D],[B, C, E],[A, B, C, E],[B, E]]return datasetdef create_candidates(dataset):# 生成1项集的候选集函数candidates []for transaction in dataset:for item in t…

电子学会C/C++编程等级考试2021年06月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:逆波兰表达式 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* +…

Java 数据结构篇-实现堆的核心方法与堆的应用(实现 TOP-K 问题:最小 k 个数)

文章目录 1.0 堆的说明 2.0 堆的成员变量及其构造方法 3.0 实现堆的核心方法 3.1 实现堆的核心方法 - 获取堆顶元素 peek() 3.2 实现堆的核心方法 - 下潜 down(int i) 3.3 实现堆的核心方法 - 交换元素 swap(int i,int j) 3.4 实现堆核心方法 - 删除堆顶元素 poll() 3.5 实现堆…

论文阅读——Semantic-SAM

Semantic-SAM可以做什么: 整合了七个数据集: 一般的分割数据集,目标级别分割数据集:MSCOCO, Objects365, ADE20k 部分分割数据集:PASCAL Part, PACO, PartImagenet, and SA-1B The datasets are SA-1B, COCO panopt…

第15章 《乐趣》Page305~311, 代码精简以后,讨论一下引用含义的问题

将Page305~311的代码精简了一下&#xff0c;讨论一下引用含义的问题&#xff0c;精简之后的代码如下&#xff1a; #include <iostream> #include <SDL2/SDL.h>using namespace std;namespace sdl2 {char const* last_error() {return SDL_GetError(); }struct Ini…

10 新字符设备驱动文件

一、新字符设备驱动原理 因为 register_chrdev 和 unregister_chrdev 两个函数是老版本驱动文件&#xff0c;现在可以用新字符设备驱动 API 函数。 1. 分配和和释放设备号 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可&#xff0c;但是这样会带来两…

pytest之allure测试报告03:allure动态自定义报告

1、测试用例模块中引入allure&#xff1a;import allure 2、yaml文件中定义添加title、story的值&#xff1a; 3、测试用例中读取调用。eg:allure.dynamic.title() 4、运行报告查看&#xff1a;成功动态展示yaml文件中配置的story、title

【Spark精讲】Spark内存管理

目录 前言 Java内存管理 Java运行时数据区 Java堆 新生代与老年代 永久代 元空间 垃圾回收机制 JVM GC的类型和策略 Minor GC Major GC 分代GC Full GC Minor GC 和 Full GC区别 Executor内存管理 内存类型 堆内内存 堆外内存 内存管理模式 静态内存管理 …

时序预测 | Python实现LSTM电力需求预测

时序预测 | Python实现LSTM电力需求预测 目录 时序预测 | Python实现LSTM电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前最先进的行业预测进行比较。使用…

git代码管理学习文档

1.版本控制 每一版本都会发生变化 更新版本&#xff0c;回退版本 版本控制实际就是控制文件的变化 服务器端和每个人的电脑上都会记录版本的变化&#xff0c;也就是说整个团队都记录了版本的变化。 不需要连网&#xff0c;他是分布式的&#xff0c;在自己电脑上也可以操作。 …

Docker构建镜像时空间不足:/var/lib/docker,no space left on device

背景 在一次更新业务服务功能后&#xff0c;重新在服务器上构建微服务镜像&#xff0c;在构建镜像时报错空间不足&#xff1a; /var/lib/docker, no space left on device 赶紧用 df -h 看了下磁盘使用情况&#xff0c;果然&#xff0c; devicemapper 已经满了。。由于需要紧急…

Python+Requests+Pytest+YAML+Allure实现接口自动化

本项目实现接口自动化的技术选型&#xff1a;PythonRequestsPytestYAMLAllure &#xff0c;主要是针对之前开发的一个接口项目来进行学习&#xff0c;通过 PythonRequests 来发送和处理HTTP协议的请求接口&#xff0c;使用 Pytest 作为测试执行器&#xff0c;使用 YAML 来管理测…

【halcon深度学习】目标检测的数据准备过程中的一个库函数determine_dl_model_detection_param

determine_dl_model_detection_param “determine_dl_model_detection_param” 直译为 “确定深度学习模型检测参数”。 这个过程会自动针对给定数据集估算模型的某些高级参数&#xff0c;强烈建议使用这一过程来优化训练和推断性能。 过程签名 determine_dl_model_detection…

智能优化算法应用:基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.秃鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

西南科技大学数据库实验二(表数据插入、修改和删除)

一、实验目的 &#xff08;1&#xff09;学会用SQL语句对数据库进行插入、修改和删除数据操作 &#xff08;2&#xff09;掌握insert、update、delete命令实现对表数据插入、修改和删除等更新操作。 二、实验任务 创建数据库&#xff0c;并创建Employees表、Departments表和…

力扣108. 将有序数组转换为二叉搜索树(三种思路)

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 > 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5…