在游戏中使用物理引擎可以真实的模拟出现实世界中的一些物理效果,例如重力,摩擦力,碰撞等,在Unity中使用的是 NVIDIA 的PhysX物理引擎,该引擎可以在3D世界中模拟需要的效果,它渲染的游戏画面非常的逼真,可以给玩家身临其境的感觉。
在Unity中需要使一个物体受到物理引擎的控制,主要是通过刚体组件来实现的
刚体组件的属性
刚体组件常用属性
刚体组件常用方法
代码实例
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
private Rigidbody r;
void Start ()
{
//Rigidbody rb = GetComponent<Rigidbody>();
//// 获取物体刚体上的属性
//float mass = rb.mass; // 质量
//float drag = rb.drag; // 空气阻力
//rb.angularDrag; // 角阻力
//rb.useGravity; //当前游戏对象是否受到重力影响
//rb.isKinematic; //是否使用动力学
//rb.freezeRotation; // 是否冻结游戏对象的旋转
r = GetComponent<Rigidbody>();
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
// 给当前游戏对象施加一个力
//r.AddForce(new Vector3(0f, 10f, 0f));
// 给当前游戏对象施加力矩/扭矩,扭矩可以使物体旋转
//r.AddTorque(new Vector3(0f, 10f, 0f));
// 给游戏对象在指定的位置上添加一个力
//r.AddForceAtPosition(new Vector3(0f, 10f, 0f), new Vector3(0.5f, 0.5f, 0.5f));
// 在指定的位置添加一个爆炸力
r.AddExplosionForce(1500f, Vector3.zero, 4f);
}
}
}
Collider 碰撞器
碰撞发生的条件:
- 发生碰撞的两个物体都必须带有Collider
- 发生碰撞的两个物体至少有一个带有刚体
- 发生碰撞的两个物体必须有相对的运动
**
在Unity中,如果我们给一个物体设置了static,同时这个物体有Collider但是没有Rigibody,那么游戏运行后Unity认为这个物体是不可动的,此时如果我们通过代码让它动了,所有的跟这个物体一样属性的物体;系统都要重新计算位置,这样对系统的消耗很不利的,所以不建议给此类对象设置移动
**