物理系统之碰撞检测——刚体

本文详细介绍了Unity中刚体RigidBody组件在碰撞检测中的作用,包括质量、空气阻力、是否受重力影响、插值运算、碰撞检测模式和约束等关键属性,帮助理解如何模拟真实世界的物理效果,以及如何避免快速移动物体的穿模问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

碰撞产生的必要条件,两个物体都有碰撞器,至少一个物体有刚体

但是碰撞器只是表示体积,而刚体才是相关力的计算

RigidBody组件信息:刚体让物体可以模拟受到力的作用

注意:两个物体A去推B,B被推开,是因为B有刚体属性受力的作用,能进行体积的计算从而被推动,而A即使没有刚体属性但是有碰撞器也有可能推动B

1、Mass:质量(默认为千克),质量越大惯性越大,即当前状态更不容易改变

eg:轻的A去推重的B很难,反过来很容易

2、Drag:空气阻力,根据力移动对象时影响对象的空气阻力大小,0表示没有空气阻力(相对位移的空气阻力)

3、Angular Darg:根据扭矩旋转对象时影响对象的空气阻力大小,0表示没有空气阻力(相对旋转的空气阻力)

4、Use Gravity:是否受重力影响

5、Is Kinematic:如果启用此选项,则对象将不会被物理引擎驱动,只能通过(Transform)对其进行操作。对于移动平台,或者如果要动画化附加了HingeJoint的刚体,此属性将非常有用

6、Interpolate:插值运算,让刚体物体移动更平滑

None:不应用插值运算

Interpolate:根据前一帧的变换来平滑变换(当将物理帧更新时间,即Fixed Timestep时间变长时特别有用)

Extrapolate:差值运算,根据下一帧的估计变换来平滑变换

7、Collision Detection(碰撞检测模式):用于防止快速移动的对象穿过其他对象而不检测碰撞(比如子弹速度太快穿过墙体)

(1)Discrete:离散检测

对场景中的所有其他碰撞体使用离散碰撞检测,其他碰撞体在测试碰撞时会使用离散碰撞检测,用于正常碰撞(默认值)

### Unity刚体碰撞的基础概念 在 Unity 中实现物体之间的碰撞检测,通常需要给对象添加 `Rigidbody2D` 组件以及相应的 `Collider2D` 组件[^2]。`Rigidbody2D` 定义了游戏对象如何响应物理引擎的作用,而 `Collider2D` 则定义了该对象的形状用于与其他对象发生接触。 #### Rigidbody2D 类型及其特性 存在三种主要类型的 `RigidBody2D`: 1. **Dynamic (动态)**:这是最常用的模式,默认情况下启用重力作用,并允许物体之间相互施加力矩。这种类型的刚体会参与完整的物理仿真过程,但是不能通过 Transform 来直接修改位置或旋转角度。 ```csharp private Rigidbody2D rb2d; void Start(){ rb2d = GetComponent<Rigidbody2D>(); } ``` 2. **Kinematic (运动学)** 和 Static (静态),这两种类型不在本次讨论范围内,因为它们不完全遵循物理法则或者根本不具备动力学行为。 #### Collider2D 配置 为了使两个具有 `Rigidbody2D` 的实体能够互相感知并触发事件,还需要为这些实体配置合适的 `Collider2D` 形状(例如 BoxCollider2D, CircleCollider2D)。当设置了正确的碰撞器之后,只要满足一定的条件——比如距离足够近且速度方向合适,则会激活特定的方法如 OnCollisionEnter(), OnTriggerStay() 等来处理实际发生的交互逻辑。 #### 实现自碰撞与intercollision 对于更复杂的场景需求,像设置内部结构间的碰撞即 self-collision 或者不同组内的粒子间碰撞 intercollision ,其操作流程基本一致;主要是针对想要产生碰撞效果的目标设定对应的碰撞规则和参数调整[^1]。 ```csharp void OnCollisionEnter2D(Collision2D other){ Debug.Log("Collision detected with "+other.gameObject.name); } ``` 上述代码展示了如何监听进入碰撞状态的对象名称,在此基础之上可以进一步扩展功能完成更多复杂任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值