Box Collider 2D盒子碰撞器 agile Posted on May 17 2020 > 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 https://www.cnblogs.com/linzheng/p/3954985.html 盒子碰撞器(BoxCollider2D)是 Unity2D 中常用的碰撞器,所有为碰撞器,顾名思义,就是用于检测物体之间的碰撞情况的,Unity2D 里面除了 BoxCollider2D 碰撞器之外还集成 Box2D 物理引擎和一系列 2D 物理组件,分别如下: 1 Rigid-body 组件(RigidBody2D)支持 static/kinematic/dynamic 刚体, 质量, 线性 / 角 速度, 拖动和自动休眠,和固定角度限制。 2 圆形碰撞器(CircleCollider2D)支持圆心和半径 3 盒子碰撞器(BoxCollider2D)支持中心和大小 4 多边形碰撞器(PolygonCollider2D)支持任意多边形。它能通过拖动 sprite 到组件上来初始化为组件形状 5 距离关节 (DistanceJoint2D) 支持在两个刚体间存在一个硬连接(本人理解是用一个硬的物体(例如小棒)连接两个刚体) 6 铰链关节 (HingeJoint2D) 支持线性和有角度的限制以及马达驱动 7 滑动关节 (SliderJoint2D) 支持轴限制,线性限制和马达驱动 8 弹簧关节(SpringJoint2D)支持在刚体间使用一个软弹簧 在做一些物理的碰撞的时候可以根据游戏的实际情况来选择合适的碰撞器,下面以 盒子碰撞器(BoxCollider2D)为例说明一下: 碰撞器也是属于游戏对象的一个组件,可以通过添加组件的方式来添加盒子碰撞器,如下图所示: ![032250162821463.png](https://tools.nxcloud.club:12500/images/2020/05/17/032250162821463.png) 添加之后如下所示: [![032251486105822.png](https://tools.nxcloud.club:12500/images/2020/05/17/032251486105822.png)](https://tools.nxcloud.club:12500/image/Vek3) Size 和 Center 很好理解就是用于确定盒子的大小和位子,那个主要看看这个 Is Trigger 属性,这个属性默认是不打勾的,它表示是否启用触发器。是否启用触发器主要是跟脚本有关系的,启动触发器之后碰撞检测会触发脚本的相关方法。如: void OnTriggerEnter2D(Collider2D collidedObject) void OnTriggerExit2D(Collider2D collidedObject) ** 当发生碰撞反应的时候,会先检查此属性。** ** 当激活此选项时,会调用碰撞双方的脚本 OnTrigger***, 反之,脚本方面没有任何反应。** ** 当激活此选项时,不会发生后续物理的反应。反之,发生后续的物理反应。** ** 总结:Is Trigger 好比是一个物理功能的开关, 是要 “物理功能” 还是要“OnTrigger 脚本”。** 所以如果你需要用脚本来处理一些碰撞发生的一些事情,那就就需要添加脚本来实现着两个方法。添加脚本如下图所示: ![032306077352655.png](https://tools.nxcloud.club:12500/images/2020/05/17/032306077352655.png) OnTriggerEnter 与 OnCollisionEnter 的区别 OnTriggerEnter:一个有 Rigidbody,另一个有 Trigger 的 Collider OnCollisionEnter:一个有 Rigidbody(非 Kinematic),另一个有非 Trigger 的 Collider <table><tbody><tr><td colspan="7" align="center">Collision detection occurs and messages are sent upon collision<br>碰撞后有碰撞检测并有碰撞信息发出</td></tr><tr><td> </td><td align="left">Static Collider<br>静态碰撞器</td><td align="left">Rigidbody Collider<br>刚体碰撞器</td><td align="left">Kinematic <br clear="all">Rigidbody Collider<br>运动学刚体碰撞器</td><td align="left">Static <br clear="all">Trigger Collider<br>静态触发碰撞器</td><td align="left">Rigidbody <br clear="all">Trigger Collider<br>刚体触发碰撞器</td><td align="left">Kinematic Rigidbody <br clear="all">Trigger Collider<br>运动学刚体触发碰撞器</td></tr><tr><td align="left">Static Collider 静态碰撞器</td><td> </td><td align="center">Y</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Rigidbody Collider 刚体碰撞器</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td> </td><td> </td><td> </td></tr><tr><td align="left">Kinematic Rigidbody Collider <br>运动学刚体碰撞器</td><td> </td><td align="center">Y</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Static Trigger Collider<br>静态触发碰撞器</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Rigidbody Trigger Collider<br>刚体触发碰撞器</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Kinematic Rigidbody Trigger Collider<br>运动学刚体触发碰撞器</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table> <table><tbody><tr><td colspan="7" align="center">Trigger messages are sent upon collision<br>碰撞后有触发信息</td></tr><tr><td> </td><td align="left">Static Collider<br>静态碰撞器</td><td align="left">Rigidbody Collider<br>刚体碰撞器</td><td align="left">Kinematic <br clear="all">Rigidbody Collider<br>运动学刚体碰撞器</td><td align="left">Static <br clear="all">Trigger Collider<br>静态触发碰撞器</td><td align="left">Rigidbody <br clear="all">Trigger Collider<br>刚体触发碰撞器</td><td align="left">Kinematic Rigidbody <br clear="all">Trigger Collider<br>运动学刚体触发碰撞器</td></tr><tr><td align="left">Static Collider 静态碰撞器</td><td> </td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Rigidbody Collider 刚体碰撞器</td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Kinematic Rigidbody Collider<br>运动学刚体碰撞器</td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Static Trigger Collider 静态触发碰撞器</td><td> </td><td align="center">Y</td><td align="center">Y</td><td> </td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Rigidbody Trigger Collider<br>刚体触发碰撞器</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Kinematic Rigidbody Trigger Collider<br>运动学刚体触发碰撞器</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr></tbody></table> <table border="2"><tbody><tr><td colspan="7" align="center"> </td></tr><tr><td> </td><td align="left">Static Collider</td><td align="left">Rigidbody Collider</td><td align="left">Kinematic <br clear="all">Rigidbody Collider</td><td align="left">Static <br clear="all">Trigger Collider</td><td align="left">Rigidbody <br clear="all">Trigger Collider</td><td align="left">Kinematic Rigidbody <br clear="all">Trigger Collider</td></tr><tr><td align="left">Static Collider</td><td> </td><td align="center">Y</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Rigidbody Collider</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td> </td><td> </td><td> </td></tr><tr><td align="left">Kinematic Rigidbody Collider</td><td> </td><td align="center">Y</td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Static Trigger Collider</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Rigidbody Trigger Collider</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr><tr><td align="left">Kinematic Rigidbody Trigger Collider</td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr></tbody></table> <table border="2"><tbody><tr><td colspan="7" align="center"><strong>Trigger messages are sent upon collision</strong></td></tr><tr><td> </td><td align="left">Static Collider</td><td align="left">Rigidbody Collider</td><td align="left">Kinematic <br clear="all">Rigidbody Collider</td><td align="left">Static <br clear="all">Trigger Collider</td><td align="left">Rigidbody <br clear="all">Trigger Collider</td><td align="left">Kinematic Rigidbody <br clear="all">Trigger Collider</td></tr><tr><td align="left">Static Collider</td><td> </td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Rigidbody Collider</td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Kinematic Rigidbody Collider</td><td> </td><td> </td><td> </td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Static Trigger Collider</td><td> </td><td align="center">Y</td><td align="center">Y</td><td> </td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Rigidbody Trigger Collider</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr><tr><td align="left">Kinematic Rigidbody Trigger Collider</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td><td align="center">Y</td></tr></tbody></table> Unity 利用 Stencil(模版测试) 实现mask的遮挡效果 可遮挡粒子和自定义遮挡形状 Unity中Avatar换装实现