虚幻学习笔记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.mzph.cn/news/220152.shtml

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

相关文章

C++Weekly - Code Review: O3DE Game Engine

对宣布开源的3D游戏引擎O3DE的简单Code Review。 A Quick Look At the Source To Amazons O3DE Game Engine. (Open source 3D Engine) 之前叫做Lumberyard。 Home - O3DE 1,pull up the code on github,用的是CLion 2,先查看CMake。用的…

docker---数据卷

docker---数据卷 数据卷: 容器与宿主机之间进行数据共享 数据卷是一个供容器使用的特殊的目录,容器的目录和宿主机的目录进行映射,主机和宿主机之间都可以对目录中的文件进行修改,双发同步生效。对镜像也没有影响。宿主机到容器实现数据迁移…

区块链是个啥

区块链算是一个散尽硝烟的热点, 现在说这个,有点冷水里冒热气的感觉。 先百度一下,区块链就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这个链条被保存在所有的服务器中..…

Docker Compose入门:打造多容器应用的完美舞台

Docker Compose 是一个强大的工具,它允许开发者通过简单的 YAML 文件定义和管理多容器的应用。本文将深入讨论 Docker Compose 的基本概念、常用命令以及高级应用场景,并通过更为丰富和实际的示例代码,助您轻松掌握如何通过 Docker Compose 打…

【08】ES6:运算符的扩展

一、指数运算符 指数运算符(**)返回第一个操作数取第二个操作数的幂的结果。 x ** y2 ** 2 // 4 2 ** 3 // 8指数运算符是右结合的。 a ** b ** c 等于 a ** (b ** c)2 ** 3 ** 2 // 相当于 2 ** (3 ** 2) 512指数运算符可以与等号结合,…

数据结构和算法 - 前置扫盲

数据结构和算法 一、前置扫盲 1、数据结构分类 1.1 逻辑结构:线性与非线性 tip:逻辑结构揭示了数据元素之间的逻辑关系。 线性数据结构:元素间存在明确的顺序关系。 数据按照一定顺序排列,其中元素之间存在一个对应关系&#x…

独立完成软件的功能的测试(5. 完结总结)

独立完成软件的功能的测试(5. 完结&总结) 软件测试的基础理论 1. 什么是软件:控制计算机硬件的工具。2. 什么是软件测试:使用技术的手段,查找软件的缺陷,保证软件的质量3. 软件测试的分类1. 阶段分&am…

Liunx系统挂载磁盘

1.具体步骤 大概五个步骤 添加磁盘磁盘分区格式化分区挂载分区到指定目录设置开机自动挂载 目标将sdb1分区挂载到/data目录 2.添加磁盘 使用lsblk -f命令可以查看当前系统磁盘情况 lsblk -f 可以看到已经有一个磁盘sda,现在我们给虚拟机增加一个磁盘 添加完成后…

数据结构-集合

介绍 数据结构中的集合是一种包含不同元素的数据结构,其中每个元素都是独一无二的,即集合中的元素互不相同且无序。 集合数据结构分类如下: 并集是两个集合的所有部分合并在一起形成的集合;交集是两个集合共同包含的元素组成的集…

数据结构与算法:插入排序

原理 保证区间内排好顺序,逐渐将区间外数据插入到该区间中。 从局部扩散到整体。 第一次:保证0-1范围内有序 arr[0]和arr[1]对比,若arr[0] 大于 arr[1] ,交换两个值, 0-1范围内有序。 第二次:保证 0-2 …

Java八股文面试全套真题【含答案】- Spring篇

以下是一些关于Spring的经典面试题以及它们的答案: 什么是Spring框架? Spring是一个轻量级的开源Java框架,用于快速构建企业级应用程序。它提供了一个容器,可以集中管理和组织应用程序的各个组件,同时提供了一套丰富的…

记录 | 命令行模式clash报错Can‘t find MMDB, start download

下载: https://link.zhihu.com/?targethttps%3A//gitee.com/mirrors/Pingtunnel/blob/master/GeoLite2-Country.mmdb 重命名为 Country.mmdb 下载完放到 ./clash 启动的同级目录就行 不行的话就放到 ~/.config/clash 下

【PID学习笔记 8 】控制系统的分析方法之一

写在前面 前面已经完成了控制系统的性能指标学习,从这节开始继续学习控制系统的分析方法,本文重点介绍分析方法概述和时域分析法。 一、控制系统的基本分析方法 控制系统的基本分析方法包括: 古典方法(经典控制理论)…

力扣题:数字与字符串间转换-12.14

力扣题-12.14 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:442. 数组中重复的数据 解题思想:从字符串中能够正确提取数字即可 class Solution(object):def complexNumberMultiply(self, num1, num2):""":type num1:…

nextTick详解

一. nextTick是什么? 官方定义: 在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的DOM翻译一下就是: Vue在更新DOM时是异步执行的。当数据发生变化的时候,Vue将开启队列&#xf…

2.5 常规游戏中模型通用要求介绍

一、布线和理性 多星点(4个及4个以上边的交点) 如果是在中模阶段,减少使用多星点,因为会在细分是时出现凸点问题,如果要使用多星点,需要通过布线技巧把它移动至平面处,不要让他出现在倒角边缘。…

科技提升安全,基于DETR【DEtection TRansformer】模型开发构建商超扶梯场景下行人安全行为姿态检测识别系统

在商超等人流量较为密集的场景下经常会报道出现一些行人在扶梯上摔倒、受伤等问题,随着AI技术的快速发展与不断普及,越来越多的商超、地铁等场景开始加装专用的安全检测预警系统,核心工作原理即使AI模型与摄像头图像视频流的实时计算&#xf…

深入理解Java虚拟机---Java内存模型

JMM Java内存模型主内存和工作内存volatile Java内存模型 Java内存模型是Java虚拟机规范中试图定义一种Java内存模型(JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台上都能达到一致的内存访问效果。可以理解为JMM定义一套在多线程读写共…

Linux常见排错思路及命令

Linux常见排错思路及命令 一、引言 在Linux系统中,由于其高度可配置和可定制的特性,可能会遇到各种问题。本文将介绍一些常见的排错思路,并提供一些常用的命令,以帮助您快速定位和解决问题。 二、常见排错思路 查看系统日志 …

计算机网络简答题

面向连接和非连接的服务特点 面向连接的服务:通信双方在进行通信之前,要事先建立一个完整的可以彼此沟通的通道,在通信过程中整个连接的情况可以被实时的监控和管理 面向非链接的服务:不需要预先建立一个联络两个通信节点的连接&a…