(一)定义
刚体:用来模拟 GameObject 对象在现实世界中的物理特性,包括重力,阻力,质量,速度等;
(二)组件参数介绍
参数 | 含义 | 功能 |
---|---|---|
Mass | 物体的质量 | (1)位为Kg |
Drag | 平移阻力 | (1)用来表示物体因受阻力而速度衰减的状态 (2)0表示没有阻力,infinity表示立即停止移动 |
Angular Drag | 旋转阻力 | (1)用于模拟物体因旋转而受到的各方面的影响 |
Use Gravity | 是否使用重力 | (1)表示物体是否受到重力影响,false时用来模拟失重现象 (2)只有在Is Kinematic 为 false 的时候才会有效果 |
Is Kinematic | 否接受动力学模拟 | (1)表示对象是否遵循牛顿运动学物理定理 (2)为true表示该物体运动状态不受外力,碰撞和关节的影响,而只受到动画以及附加在物体上的脚本影响 |
Interpolate | 插值类型 | 在物体的运动帧之间进行插值,使得运动更加自然 (1)None:无插值 (2)Interpolate:差值(根据上一桢的位置来做平滑移动) (3)Extrapolate:推算(根据预测的下一桢的位置来做平滑移动) |
Collision Detection | 碰撞检测模式 | 无论哪种检测模式,都有可能被穿越 (1)Discrete:不连续模式; (在某一帧两物体的碰撞器发生重叠时才能被检测到,可能发生穿越现象) (2)Continuous:连续模式; (一般用在目标碰撞体上,防止快速移动的物体通过该物体而不检测碰撞) (3)ContinuousDynamic:动态连续模式; (一般用在两个高速运动的物体上,防止互相穿越) |
Constraints | 刚体约束 | (1)Freeze Rotation:冻结旋转; (2)Freeze Position:冻结位移; |
(三)常用方法
AddForce():给物体施加一个瞬时力,使物体在该力的作用下产生一个初速度,接着物体在初速度的作用下开始运动;
MovePosition():使物体按照参数移动至指定位置,常用于FixedUpdate方法中;
MoveRotation():使物体按照参数旋转到某个方位;
Sleep():使刚体处于休眠状态;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCtrl : MonoBehaviour
{
public Rigidbody playerRb;//声明刚体对象
public float speed = 0.5f;
void Start()
{
playerRb = GetComponent<Rigidbody>();// 获取对象Rigidbody属性
}
void Update()
{
playerRb.AddForce(transfrom.forward * speed);//给物体添加一个向前的初速度
}
void FixedUpdate()
{
playerRb.MovePosition(new Vector3(10,100,200));
}
}
(四)刚体碰撞Collision
降低穿越现象的方法有:
1、适当增加两物体碰撞器的厚度;
2、减量降低两物体碰撞时的相对速度;
碰撞产生的条件:
(1)必须双方都要有碰撞器,因为发生碰撞的是碰撞器;
(2)运动方一定要有刚体组件,另一方有没有均可;