本节要点
#1.AddForce()
1.作用
给刚体添加一个力,让刚体按“世界坐标系”进行运动。
2.代码
Rigidbody.AddForce(Vector3,ForceMode);
Vector3:力的方向和大小;
ForceMode:力的模式[enum 类型]。
3.ForceMode 参数
类型为枚举类型,以什么样的方式添加力给刚体。
枚举值说明
Acceleration:[əkˌseləˈreɪʃn](加速度);
Force:(力)这种模式通常用于设置真实的物理;
Impulse:(冲击力)这种模式通常用于瞬间发生的力;
VelocityChange:(速度的变化);
#2.AddRelativeForce()
1.作用
给刚体添加一个力,让刚体按“自身坐标系”进行运动。
2.代码
Rigidbody.AddRelativeForce(Vector3,ForceMode);
Vector3:力的方向和大小;
ForceMode:力的模式[enum 类型]。
3.FixedUpdate()
固定更新方法。
所有和物理相关的操作,代码都要写在 FixedUpdate()方法体内。
固定更新的时间间隔是 0.02 秒,1 秒执行 50 次。
Edit-->Project Settings-->Time 面板中的 Fixed Timestep 参数设置。
Update()方法是每帧执行一次。
画面每渲染完一次,就是一帧,每帧的时间是不固定的。
在 Update()方法中执行物理操作,会出现卡顿的情况。
场景视图
关键代码
ForceTest
public class ForceTest : MonoBehaviour {
private Rigidbody m_Rigibody;
// Use this for initialization
void Start () {
m_Rigibody=gameObject.GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
//m_Rigibody.AddForce(Vector3.forward, ForceMode.Force);//世界坐标系向前力
// m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);//自身坐标系向前力
//给Z键添加一个自身向前的力
if (Input.GetKeyDown(KeyCode.Z))
{
m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);
}
}
//物理更新方法 执行物理操作;
void FixUpDate() {
}
}
RigidbodyMove
public class RigidbodyMove: MonoBehaviour {
private Rigidbody m_Rigidbody;
private Transform m_Tranform;
// Use this for initialization
void Start () {
m_Rigidbody=gameObject.GetComponent<Rigidbody>();
m_Tranform=gameObject.GetComponent<Transform>();
//Test
// m_Rigidbody.MovePosition(m_Tranform.position+ Vector3.forward*10);
}
// Update is called once per frame
void Update () {
//向前
if (Input.GetKey(KeyCode.W))
{
m_Rigidbody.MovePosition(m_Tranform.position+Vector3.forward*0.1f);
}
if (Input.GetKey(KeyCode.S))
{
m_Rigidbody.MovePosition(m_Tranform.position + Vector3.back * 0.1f);
}
if (Input.GetKey(KeyCode.A))
{
m_Rigidbody.MovePosition(m_Tranform.position + Vector3.left * 0.1f);
}
if (Input.GetKey(KeyCode.D))
{
m_Rigidbody.MovePosition(m_Tranform.position + Vector3.right * 0.1f);
}
}
}