Unity学习笔记---物理引擎

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)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值