上次的打飞碟游戏是利用Transform来实现飞碟的位移,以此模仿物体运动的轨迹。事实上,如果游戏对象是一个刚体,就可以按照现实世界中物体运动那样,给它一个力,然后让它“自由发挥”,不需要我们在脚本里Update每一帧手动写对象的位置。
关于刚体的学习
游戏对象添加Rigidbody组件后即具备物理属性,也就是说“成为了”刚体。
刚体变量
类型 | 变量 | 备注 |
---|---|---|
Vector3 | velocity | 速度向量 |
Vector3 | angularVelocity | 角速度向量 |
float | drag | 阻力 |
float | angularDrag | 角阻力 |
float | mass | 物体的质量 |
bool | useGravity | 是否受重力影响 |
bool | isKnematic | 是否开启空气动力学 |
向刚体施加力
给具有刚体的gameobject施加力,常用的方法是void Rigidbody.AddForce();
具体有四个重载:
- void Rigidbody.AddForce(vector3 Force);
- void Rigidbody.AddForce(Vector3 Force,ForceMode mode);
- void Rigidbody.AddForce(float x,float y,float z);
- void Rigidbody.AddForce(float x,float y,float z,ForceMode mode)
其中,ForceMode有四种形式
- ForceMode.Force:给物体添加一个持续的力并使用其质量
- ForceMode.Acceleration:给物体添加一个持续的加速度,但是忽略其质量(采用默认质量1,忽略设置的质量)
- ForceMode.Impulse:给物体添加一个瞬间的力并使用其质量
- ForceMode.VelocityChange:给物体添加一个瞬间的加速度,但是忽略其质量
还可以在物体表面施加力:利用AddForceAtPosi