一、刚体 Rigidbody 参数简介。
Mass:质量
Drag:组里。当游戏对象受力运动时受到的空气阻力。0表示没有空气阻力,阻力极大是游戏对象会立即停止运动。
Angulular Drag:角阻力。当游戏对象受扭矩力旋转时受到的控制阻力。0表示没有空气阻力,阻力极大时游戏对象会立即停止旋转。
Use Gravity:使用重力。若开启此项,游戏对象会受到重力的影响。
Is Kinematic:是否开启动力学。若打开这个参数,那么物体不会再受Rigidbody 的影响,跟没有加 Rigidbody 是一样的效果,只能通过 Transform 组件属性对其操作。应用场景:可以加上刚体,当不需要刚体的时候打上勾,需要的时候再去掉勾。比如电梯,当向上走时,我把这个勾上,利用 Transform 使电梯向上走。
Interpolate:插值。该项 用于控制刚体的运动的抖动情况,有三个选项可供选择。
- None ,没有插值。
- Interpolate:内插值。基于前一帧的 Transform 来平滑此次的 Transform
- Extrapolate:外插值。基于下一帧的 Transform 来平滑此次的 Transform。
Collision Detection:碰撞检测。该属性用于控制高速运动的游戏对象穿过其他的对象而未发生碰撞,有三个选项可供选择。默认是 Discrete,另外两项:Continous、Continuous Dynamic 都是连续检测碰撞,用于检测高速运动物体,最后一项检测频率最高。
Constraints:约束。该项用于控制对于刚体运动的约束。
- Freeze Position:冻结位置。刚体对象在世界坐标系的 X、Y、Z轴方向上的移动将无效。
- Freeze Rotation:冻结旋转。刚体对象在世界坐标系中的 X、Y、Z 轴方向上的旋转无效。
刚体的应用
学习使用AddForce方法,该方法给添加刚体的对象添加一个力。
AddForce有两个参数:1、力的方向。2、力的模式(可选)
刚体遵循动量守恒定力 ft = mv,下面介绍的力的模式跟动量守恒定力有关。
关于力的模式有几种:
- ForceMode.Force:默认方式,给物体添加一个持续力。
- ForceMode.Acceleration :可持续加速度。会忽略刚体的实际质量而采用默认值1.0f。
- ForceMode.Impulse : 瞬间冲击力。把 t 的值默认为1。只有一开始有个力,然后就不给力了。
- ForceMode.VelocityChange:直接改变速度大小,采用默认质量为1.0,同时也忽略系统的实际帧频间隔,采用默认间隔1.0
其中ForceMode.Force、ForceMode.Impulse 这两个用的比较多。
写一个例子,关于这个方法。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DaPao : MonoBehaviour
{
public GameObject pullet;
public Transform pulletPosition;
public int power=500;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
GameObject a = Instantiate(pullet, pulletPosition.position,pulletPosition.rotation);
// a.GetComponent<Rigidbody>().AddForce((Vector3.forward+Vector3.up)*power,ForceMode.Force);
a.GetComponent<Rigidbody>().AddForce((Vector3.forward)*power,ForceMode.Force);
Destroy(a,5);
}
}
}