[Unity]碰撞器的接触捕获层详解

目录

  • 前言
  • ※关闭效果器(Effector)的遮罩
  • 接触捕获层的官方描述
  • 官方描述的翻译和注解
    • 接触捕获层作用简介
    • 接触(Contact)和捕获(Capture)
    • 配置接触捕获层的作用
    • ※接触捕获层对碰撞响应的影响
    • 需要接触捕获的物理查询
    • 需要接触捕获的物理回调
    • 注意
    • 运行时(Runtime)修改
    • 接触的相互性
    • 总结
  • 相关问题汇总
    • 1.怎样完全无视A和B的任何接触和碰撞?
    • 2.怎样允许A和B的接触,但禁用A和B之间的物理碰撞?
    • 3.为什么全局碰撞矩阵/包含层/排除层失效了?

前言

本文详细介绍了Unity引擎Collider2D组件的Layer Overrides属性栏的属性Contact Capture Layers,即接触捕获层
如果你在项目中遇到了问题,但不确定是否是接触捕获层的设置错误导致的,请跳转至相关问题汇总查询。

本文的所有解释基于Unity 2023.2官方文档,具有时效性,若Unity版本更迭导致解释失效,欢迎留言指正!

※关闭效果器(Effector)的遮罩

如果你希望在Unity工程中对本文内容进行验证,并且实验对象的碰撞器(Collider)勾选了由效果器使用,请取消勾选效果器的使用碰撞器遮罩选项,否则效果器的遮罩会覆盖碰撞器的Layer Overriders属性,导致实验结果与预期不符。

接触捕获层的官方描述

Unity Decumentation - Collider2D.contactCaptureLayers
请添加图片描述

官方描述的翻译和注解

接触捕获层作用简介

接触捕获层:与当前Collider2D接触的层,如果在Contact Capture Layers中被勾选,那么接触将被捕获

接触(Contact)和捕获(Capture)

接触由物理系统产生,用于计算碰撞响应等行为。
接触是自动生成的,只需要捕获接触就可以对其执行物理查询或生成物理回调

物理查询】IsTouching、IsTouchingLayers/GetContacts等用于检测和查询物理接触情况的方法。
注意,BoxCast、RayCast等方法和此处的物理查询不同,这些方法通过数学计算来预测和检测物体是否会与其他物体相交,因此不需要接触捕获
物理回调】OnCollisionEnter、OnCollisionExit、OnTriggerEnter、OnTriggerExit等特定的物理事件发生时被自动调用的方法。

通常,所有接触层都会被捕获和存储,但这会导致处理时间和内存消耗增加。
因此,只选择需要的层进行捕获,可以提高性能并降低整体内存消耗;
但是未捕获的层的接触,在物理查询中不可用,也不会产生物理回调。

接触层
由层级碰撞矩阵、Layer Overrides的包含层和排除层决定。
值得注意,不是所有接触层都会被捕获,只有被捕获的接触层才能进行物理查询、产生物理回调。

配置接触捕获层的作用

通过配置接触捕获层,可以确保只接收来自选定层的响应。

这意味着在C#脚本中,可以只关心特定层的物理事件。

※接触捕获层对碰撞响应的影响

接触的捕获不会影响碰撞响应,因为接触在捕获之前总是由物理系统处理的。

【注】如果你希望禁用两个物体的碰撞响应,或者你不希望A物体和B物体之间产生任何物理互动,在接触捕获层中取消勾选是无法实现的。因为接触捕获层只负责启用/禁用物理查询和物理回调。
正确的做法:
1.如果你希望完全无视A和B的接触:在全局碰撞矩阵中取消勾选A和B所在的Layer,或者在A或B的排除层(Exclude Layers)中取消勾选B所在的图层。
e.g.人物和人物发射的子弹
2.如果你希望A不对B产生力的效果,但是需要获取A和B的碰撞信息:允许A和B的接触(在全局碰撞矩阵中勾选A和B所在的Layer,或者在A或B的包含层(Include Layers)中勾选B所在的图层),但是在A的力发送层(Force Send Layers)取消勾选B所在的图层。同理,或者在B的力接收层(Force Receive Layers)取消勾选A所在的图层。
e.g.人物和怪物发射的子弹(无击退)

需要接触捕获的物理查询

Physics2D.IsTouching
Rigidbody2D.IsTouching
Collider2D.IsTouching
Physics2D.IsTouchingLayers
Rigidbody2D.IsTouchingLayers
Collider2D.IsTouchingLayers
Physics2D.GetContacts
Rigidbody2D.GetContacts
Collider2D.GetContacts

需要接触捕获的物理回调

OnCollisionEnter2D
OnCollisionStay2D
OnCollisionExit2D
OnTriggerEnter2D
OnTriggerStay2D
OnTriggerExit2D

【注】即常用的6个碰撞回调/触发回调

注意

此属性不控制碰撞体是否会接触,而只是控制是否捕获接触以进行查询和回调。
即使在Callback Layers中选择了所有层,也只会报告那些被捕获的层。

【注】这一点在上文(接触捕获层对碰撞响应的影响)已经详细解释

运行时(Runtime)修改

修改接触捕获层将导致所有接触信息被销毁。
仍然有效的接触将通过物理回调报告为新的接触信息。
由于此属性(接触捕获层)会破坏现有接触信息,如果需要通过物理回调跟踪接触状态,不建议在运行时更改此属性。

接触的相互性

接触是相互的,如果接触中的任何一个碰撞体禁用了对接触的捕获,那么双方都不会看到接触。

总结

当某个层的接触捕获功能关闭时,该层的接触查询将不会返回结果,也不会产生任何回调。

总的来说,接触捕获层,名副其实,只负责启用/禁用对接触的捕获,没有被捕获的接触,物理查询没有结果,也不会产生回调。接触捕获层,不负责启用/禁用接触,所以即使禁用了接触捕获,A物体仍然会被B物体所阻挡!

相关问题汇总

出现以下问题时,也许不是接触捕获层设置错误导致的,请检查其他设置。

1.怎样完全无视A和B的任何接触和碰撞?

在全局碰撞矩阵中取消勾选A和B的Layer
确保A和B的Collider都没有在包含层中取消勾选对方的Layer
如果A和B的Collider使用了Effector,取消勾选Effector的遮罩

2.怎样允许A和B的接触,但禁用A和B之间的物理碰撞?

方案一:把一方设置为Trigger
方案二:取消勾选力发送/接收层
允许接触:
在全局碰撞矩阵中勾选A和B的Layer
或者在A或B的Collider的包含层中勾选对方的Layer
禁用物理碰撞:
取消勾选一方的力发送/接收层

3.为什么全局碰撞矩阵/包含层/排除层失效了?

关闭效果器(Effector)的遮罩!!!
关闭效果器(Effector)的遮罩!!!
关闭效果器(Effector)的遮罩!!!
检查层覆盖优先级(Layer Override Priority)!!!
检查层覆盖优先级(Layer Override Priority)!!!
检查层覆盖优先级(Layer Override Priority)!!!
碰撞器中使用了由复合使用由效果器使用的尤其注意。

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

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

相关文章

【Git分支管理】理解分支 | 创建分支 | 切换分支 | 合并分支 | 删除分支 | 强制删除分支

目录 前言 0.理解分支 1.查看本地仓库存在的分支 2.HEAD指向分支 3.创建本地分支 4.切换分支 5.分支提交操作 6.合并分支 快进模式Fast-forward 7.删除分支 8.强制删除分支 本篇开始介绍下Git提供的杀手级的功能:分支管理 先提交再合并 前言 在玄幻武侠…

Linux——文件目录指令、时间日期指令、搜索查找指令、压缩解压指令

目录 文件目录指令 pwd & ls 查看当前工作目录&显示当前目录所有文件及目录 cd 切换目录 mkdir & rmdir 创建&删除目录 touch 创建空文件 cp 拷贝文件/文件夹指令 rm 删除文件或文件夹 mv 移动或重命名文件 cat 查看文件 more指令 less 查看文件内容…

[激光原理与应用-115]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 19 - 主要硬件的介绍、安装与调试

目录 一、概述 1.1 前言 1.2 系统组成 1.2.1 机柜版: 1.2.2 非机柜版 1.3适用范围 1.4 工作条件 1.5 安全说明 1.6 装箱清单 二、硬件安装 2.1 光学传感器安装 2.1.1 转接件安装 2.1.2 光路校准模块的安装与光路校准 2.1.3 光学传感器的安装 2.2 通…

【学习笔记】min_25筛

背景 GDCPC2024 出题人:出这道 min25 筛是给大家增加过题数的 [呲牙][大哭][呲牙][大哭] min25筛是干啥的 快速求一个积性函数 F ( x ) F(x) F(x) 的前缀和 这个 F ( x ) F(x) F(x) 需要满足: F ( p ) ∑ i 0 a i p i F(p)\sum_{i0}a_ip^i F(p)∑…

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架,广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集,可以帮助开发者快速、高效地构建出…

C++: 位图和布隆过滤器

目录 一、位图 1.1 概念 1.2 应用 1.3 模拟实现 1.31 把比特位上的值设置为1 1.32 把比特位上的值设置为0 1.33 检测比特位上的值是否是1 1.34 代码 二、布隆过滤器 2.1 概念 2.2 优点 2.3 缺点 2.4模拟实现 一、位图 1.1 概念 运用哈希的思想,将整型…

【前端数据层高可用架构】

前端数据层高可用架构 前后端架构模式如下图 在这个架构下,客端数据可用率计算方式: 因此整体数据可用性分析表如下: 只有在客端和 BFF 都正常的情况下数据才能可用,而这种情况占比不是很高,因此整体的用户体验就不是很好。 本次建设目标 本文的设计方案就是要解决…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查,我下面的服务器有漏洞,不得已重装了,正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版,就是管理python环境的得力助手。 # 创建一个名…

C语言 do while循环语句练习 下

猜数字游戏实现 //猜数字游戏 //电脑产生 一个随机数&#xff08;1-100) //猜数字 //猜大了 //猜小了 //直到猜对了&#xff0c;结束 #include <stdlib.h> #include <time.h> void menu() {printf("********************************\n");printf("…

【Redis7】高阶篇

1 Redis单线程 VS 多线程(入门篇) 1.1 面试题 redis到底是单线程还是多线程&#xff1f; IO多路复用听说过吗&#xff1f; redis为什么快&#xff1f; 1.2 Redis为什么选择单线程&#xff1f; 1.2.1 是什么 这种问法其实并不严谨&#xff0c;为啥这么说呢? Redis的版本…

怎么将图片插入excel单元格中

首先选中单元格选择插入 在图片位置选择插入图片的位置 然后就插入成功了&#xff0c;一开始会觉得图片是附在表格上面的&#xff0c;并不在单元格里面&#xff0c;但是右边有一个小图片的图标&#xff0c;点击它可以缩小到单元格里面&#xff0c;再点击就是放大&#xff1b;

【无人值守】对数据中心电力分配系统发展的影响

数据中心在现代信息发展中承载着巨量数据的计算、存储、挖掘、分析和应用等多个方面的功能&#xff0c;是国计民生各行业的多样化的信息化的资产。对稳定的运行与安全运维是基本需求也是重要的保障。 数据中心属于高能耗产业&#xff0c;对用电负荷大且要求极度稳定。除了对电力…

ROS、pix4、gazebo、qgc仿真ubuntu20.04

一、ubuntu、ros安装教程比较多&#xff0c;此文章不做详细讲解。该文章基于ubuntu20.04系统。 pix4参考地址&#xff1a;https://docs.px4.io/main/zh/index.html 二、安装pix4 1. git clone https://github.com/PX4/PX4-Autopilot.git --recursive 2. bash ./PX4-Autopilot…

华为od 100问 持续分享4-目标院校及分数线

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

TikTok账号矩阵运营怎么做?

这几年&#xff0c;聊到出海避不过海外抖音&#xff0c;也就是TikTok&#xff0c;聊到TikTok电商直播就离不开账号矩阵&#xff1b; 在TikTok上&#xff0c;矩阵养号已经成为了出海电商人的流行策略&#xff0c;归根结底还是因为矩阵养号可以用最小的力&#xff0c;获得更大的…

RTI DDS大数据碎片

有两种类型的碎片&#xff1a;IP级碎片和DDS级碎片。 当传输层&#xff08;通常是UDP或TCP&#xff09;提供的有效载荷超过适合链路帧的最大有效载荷大小&#xff08;也称为链路最大传输单元或链路MTU&#xff09;时&#xff0c;就会发生IP级碎片。如果网络是以太网&#xff0…

【大模型】FAISS向量数据库记录:从基础搭建到实战操作

文章目录 文章简介Embedding模型BGE-M3 模型亮点 FAISS是什么FAISS实战安装faiss加载Embedding模型创建FAISS数据库搜索FAISS数据删除FAISS数据保存、加载FAISS索引 总结 本人数据分析领域的从业者&#xff0c;拥有专业背景和能力&#xff0c;可以为您的数据采集、数据挖掘和数…

通用图形处理器设计GPGPU基础与架构(二)

一、前言 本系列旨在介绍通用图形处理器设计GPGPU的基础与架构&#xff0c;因此在介绍GPGPU具体架构之前&#xff0c;需要了解GPGPU的编程模型&#xff0c;了解软件层面是怎么做到并行的&#xff0c;硬件层面又要怎么配合软件&#xff0c;乃至定出合适的架构来实现软硬件协同。…

15- 微分方程

对三角函数不敏感

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git、gdb)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…