RigidBody 刚体
组件介绍
刚体组件提供了一些物理属性,如 Mass(质量)、Drag(阻力)、Gravity(重力)、Is Kinematic(是否受物理影响)、Collision Detection(碰撞检测)、 Velocity(速度)、Force(受力)、Explosion Force(爆炸力)
物理属性
Mass 质量参数,默认单位为千克
Drag 空气阻力
Angular Drag:物体旋转时,受到的旋转阻力大小转
Use Gravity:如果启用,物体将受到重力的影响
Is Kinematic:如果启用,物体将不会由物理引擎驱动,只能由其 Transform 组件操作
Interpolate:物体运动位置的插值器
Collision Detection:碰撞检测类型,当看到物体由于运动太快而穿墙时,可以增强碰撞检测频率,选择 Continuous 选项
Constraints:对刚体运动和旋转的限制,限制物体运动时在某个坐标轴上的分量保持不变
velocity:物体运动矢量速度
angularVelocity:物体运动角速度
Gravity Scale 重力参数,是一个乘量参数,调整为0则不受重力影响。
Sleeping Mode 睡眠模式,分为永不睡眠/开始时睡眠/开始时不睡眠3种。如需要一直碰撞检测可以选择永不睡眠。
常用代码
//获取刚体组件
Rigidbody rig = GetComponent<Rigidbody>();
// 刚体受到的推力
public void AddForce(Vector3 force)
/* 刚体受到的爆炸力:
explosionForce:爆炸力大小
explosionPosition:爆炸点
explosionRadius:爆炸半径
*/
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius)
问题解决
2D游戏刚体碰撞发生旋转和抖动
在刚体组件的Constraints选项中,冻结Z轴。
同时,在代码中需要修改角色的移动逻辑为移动刚体位置,而不是角色位置。
原理:碰撞体相撞后Z轴发生变化,以及玩家操作角色移动造成碰撞区重叠后,刚体组件强行复位。
Collider 碰撞
组件介绍
碰撞体组件用于检测物体是否发生碰撞,或者消除碰撞作为触发器。
想要两个物体发生碰撞,需要满足条件:1,两个物体都有Collider组件。2,至少其中一个物体有RigidBody组件。3,处于同一层级
属性
Editor Collider 用于调节碰撞体边界
IsTrigger 是否设置为触发器,勾选后不会产生碰撞,改为穿过时触发。
Used By Composite 勾选后碰撞区会和其他碰撞盒子连在一起,可用于TielMap瓦片地图。
常用代码
//碰撞器的回调方法
// 碰撞开始
void OnCollisionEnter(Collision other)
// 碰撞过程中,每帧调用一次
void OnCollisionStay(Collision other)
// 碰撞结束
void OnCollisionExit(Collision other)
//碰撞回调的参数
// 碰撞对象的碰撞体组件
Collider collider = collision.collider;
// 碰撞点信息
ContactPoint[] contactPoint = collision.contacts;
Vector3 point = contactPoint[0].point;
// 碰撞点处当前物体的碰撞体组件(当前物体有多层子对象时, 可以获取具体碰撞的子对象)
Collider thisCollider = contactPoint[0].thisCollider;
// 碰撞点处对方物体的碰撞体组件
Collider otherCollider = contactPoint[0].otherCollider;
// 获取碰撞体的MeshRenderer组件
MeshRenderer meshRenderer = collider.GetComponent<MeshRenderer>();
//触发器的回调方法
// 触发开始
void OnTriggerEnter(Collider other)
// 触发过程中,每帧调用一次
void void OnTriggerStay(Collider other)
// 触发结束
void OnTriggerExit(Collider other)