Unity手册—碰撞检测相关汇总

本文汇总了用于碰撞检测的方法和设置
原地址:Unity手册—碰撞检测相关汇总

碰撞组件

刚体

两物体若要发生碰撞事件,则两物体必须都带有碰撞体 Collider 组件且运动的物体带有刚体 Rigidbody 组件

以下为 Rigidbody 2D 或 Rigidbody Inspector 上的部分参数说明

Inspector 面板属性 属性值 说明
BodyType 刚体类型,决定刚体的移动旋转和碰撞方式,不要在运行时修改
Dynamic 动态类型,该类型物体依据物理模拟移动,与所有 Rigidbody2D 碰撞,最消耗性能,不要使用 Transform 设置刚体的 Position 和 Rotation
Kinematic 运动学类型,该类型物体依据物理模拟移动但不受力的作用,仅与动态类型刚体碰撞,比动态类型节约性能,通过 Rigidbody2D.MovePosition 或 Rigidbody2D.MoveRotation 控制空间状态
Static 静态类型,不依据物理模拟移动,仅与动态类型刚体碰撞
Material 物理材质
Simulated 模拟选项
Collision Detection 碰撞器检测,3D Collider 仅 Sphere、Capsule 和 Box 支持连续检测
Discrete 离散检测,仅在每个 FixUpdate 时机检测
Continuous 连续检测,持续检测碰撞,可避免碰撞体重叠或穿过,适用于被高速移动物体碰撞的物体,更消耗性能
Continuous Dynamic 连续动态检测,适用快速移动物体,更消耗性能
Continuous Speculative 连续推测检测,比以上两种连续检测更节约性能,且可用于 Kinematic 物体,处理角度运动更有优势,但依然有可能穿过高速移动物体

API

Rigidbody2D 还有配合碰撞体使用的 API

接口 说明
Cast 以当前刚体上所有碰撞的体形状做投影,获取所有碰撞结果
ClosestPoint 获取当前刚体上所有碰撞体周边距指定点最近的点
Distance 获取当前刚体上所有碰撞体与指定碰撞体的最近距离
GetContacts 获取当前刚体上所有碰撞体与其他碰撞体的接触点
IsTouching 指定碰撞体是否与刚体上任一碰撞体接触
IsTouchingLayers 指定 LayerMask 是否与刚体上任一碰撞体接触
OverlapCollider 获取与刚体上碰撞体重叠的碰撞体
OverlapPoint 指定点是否与刚体上碰撞体重叠

碰撞器和触发器

最常用的碰撞检测方式为 GameObject 添加碰撞器 Collider 组件或勾选 Collider 中的 Is Trigger选项将碰撞器设为触发器

碰撞事件也会发送给禁用的 MonoBehavior 对象

Collider2D

生命周期碰撞事件回调
其他方法
方法 说明
Cast 依据当前 Collider2D 的形状向指定方向和距离做投影,返回投影路径上碰撞结果
ClosestPoint 找到当前 Collider2D 周边距离指定点最近的位置
Distance 计算量 Collider2D 最短距离
GetContacts 获取当前碰撞体所有接触点
IsTouching 当前是否碰撞指定 Collider2D
IsTouchingLayers 当前是否碰撞指定 LayerMask
OverlapCollider 获取当前 Collider2D 所有重叠的 Collider2D,可添加 LayerMask、Z 轴深度等筛选条件
OverlapPoint 判断当前 Collider2D 是否与指定二维点重叠
Raycast 由当前Collider2D 位置发射出一条指定方向和距离的射线,返回射线碰撞结果(不包含自身),可添加 LayerMask、Z 轴深度等筛选条件

Collider

生命周期碰撞事件回调

物理材质

属性 说明
Dynamic Friction 0-1 动摩擦力
Static Friction 0-1 静摩擦力
Bounciness 0-1 弹性
Friction Combine 碰撞摩擦力混合方式
Maximum 取两碰撞物体摩擦力最大值
Multiply 取两碰撞物体摩擦力乘积
Minimum 取两碰撞物体摩擦力最小值
Average 取两碰撞物体摩擦力平均值
Bounce Combine 同 Friction Combine

其他 API

Physics2D

接口 说明
BoxCast 另有BoxCastAllBoxCastNonAlloc,投影一个盒形,返回一个或多个碰撞结果
CapsuleCast 另有CapsuleCastAllCapsuleCastNonAlloc,投影一个胶囊形,返回一个或多个碰撞结果
CircleCast 另有CircleCastAllCircleCastNonAlloc,投影一个圆形,返回一个或多个碰撞结果
ClosestPoint 返回指定碰撞体周边距指定点最近的点
Distance 计算两碰撞体最近距离
GetContacts 获取指定碰撞体所有接触的碰撞体
GetRayIntersection 另有GetRayIntersectionAllGetRayIntersectionNonAlloc,投射一条 3D 射线,返回一个或多个碰撞结果
IgnoreCollision 使物理系统忽略两碰撞体之间碰撞和触发效果
IgnoreLayerCollision 使物理系统忽略两 Layer 之间碰撞效果
IsTouching 判断两个碰撞体是否接触
IsTouchingLayers 判断指定碰撞体是否与指定层 LayerMask 的物体接触
Linecast 另有LinecastAllLinecastNonAlloc,投射一条线段,返回一个或多个碰撞结果
OverlapArea 另有OverlapAreaAllOverlapAreaNonAlloc,获取一个或多个与指定对角两点确定的矩形区域重叠的碰撞体
OverlapBox 另有OverlapBoxAllOverlapBoxNonAlloc,获取一个或多个与指定盒形区域重叠的碰撞体
OverlapCapsule 另有OverlapCapsuleAllOverlapCapsuleNonAlloc,获取一个或多个与指定胶囊形区域重叠的碰撞体
OverlapCircle 另有OverlapCircleAllOverlapCircleNonAlloc,获取一个或多个与指定圆形区域重叠的碰撞体
OverlapCollider 获取与指定碰撞体重叠的碰撞体
OverlapPoint 另有OverlapPointAllOverlapPointNonAlloc,获取一个或多个与指定点重叠的碰撞体
Raycast 另有 RaycastAllRaycastNonAlloc,投射一条射线,返回一个或多个碰撞结果

Physics

接口 说明
CheckBox 是否有碰撞体与指定盒体区域与重叠
CheckCapsule 是否有碰撞体与指定胶囊体区域与重叠
CheckSphere 是否有碰撞体与指定球体区域与重叠
ClosestPoint 获取指定碰撞体上与指定坐标最近的点
SphereCast 另有 SphereCastAllSphereCastNonAlloc,延指定射线投射一个指定半径的球体,返回一个或多个球体碰撞结果

Ray

Physics Setting

Physics 2D Settings

设置 说明
Default Material 默认物理材质
Velocity Threshold 速度阈值,对相对速度低于该值的弹性碰撞会被处理为非弹性碰撞
Baumgarte Scale Baumgarte 比例,决定 Unity 处理碰撞重叠的速度
Default Contact Offset 触发接触距离的近似值,当碰撞体小于该值时,则触发碰撞,该值过小会减弱Unity计算多边形碰撞的能力,过大会造成假的顶点碰撞
Queries Hit Triggers 使触发器响应物理检索系统,如 Linecasts、Raycasts 等,默认开启
Queries Start In Colliders 物理检索系统检索其开始的碰撞体
Layer Collision Matrix 碰撞矩阵,决定哪些层之间可碰撞

Physics Settings

设置 说明
Bounce Threshold 速度阈值,对相对速度低于该值的弹性碰撞会被处理为非弹性碰撞
Queries Hit Backfaces 使物理检索系统检测网格碰撞器的三角形背面,默认关闭
Contacts Generation 接触产生方法,分 SAT(Legacy) 和 PCM 两种,Unity 5.5以前使用 SAT;PCM 则更有效率,产生稍有不同的反弹和减少了不必要的接触缓存,默认为 PCM
Contact Pairs Mode - Default Contact Pairs: 接收除 kinematic-kinematic 和 kinematic-static 外的所有碰撞器触发器事件 - Enable Kinematic Kinematic Pairs: 接收 kinematic-kinematic 的碰撞和触发器事件 - Enable Kinematic Static Pairs: 接收 kinematic-static 的碰撞和触发器事件 - Enable All Contact Pairs: 接收所有碰撞器触发器事件
Enable Unified Heightmaps 使用与处理网格(Mesh)碰撞相同的方式处理地形(Terrain)碰撞
Cloth Inter-Collision 布碰撞 -Distance: 定义每个布片的碰撞半径,避免过大导致抖动 -Stiffness: 定义布片间的刚性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343