本節(jié)要點(diǎn)
#1.AddForce()
1.作用
給剛體添加一個(gè)力晤碘,讓剛體按“世界坐標(biāo)系”進(jìn)行運(yùn)動(dòng)宏蛉。
2.代碼
Rigidbody.AddForce(Vector3拢驾,F(xiàn)orceMode);
Vector3:力的方向和大薪チ选;
ForceMode:力的模式[enum 類(lèi)型]钠惩。
3.ForceMode 參數(shù)
類(lèi)型為枚舉類(lèi)型柒凉,以什么樣的方式添加力給剛體。
枚舉值說(shuō)明
Acceleration:[?k?sel??re??n](加速度)篓跛;
Force:(力)這種模式通常用于設(shè)置真實(shí)的物理膝捞;
Impulse:(沖擊力)這種模式通常用于瞬間發(fā)生的力;
VelocityChange:(速度的變化)愧沟;
#2.AddRelativeForce()
1.作用
給剛體添加一個(gè)力蔬咬,讓剛體按“自身坐標(biāo)系”進(jìn)行運(yùn)動(dòng)。
2.代碼
Rigidbody.AddRelativeForce(Vector3央渣,F(xiàn)orceMode)计盒;
Vector3:力的方向和大小芽丹;
ForceMode:力的模式[enum 類(lèi)型]北启。
3.FixedUpdate()
固定更新方法。
所有和物理相關(guān)的操作拔第,代碼都要寫(xiě)在 FixedUpdate()方法體內(nèi)咕村。
固定更新的時(shí)間間隔是 0.02 秒,1 秒執(zhí)行 50 次蚊俺。
Edit-->Project Settings-->Time 面板中的 Fixed Timestep 參數(shù)設(shè)置懈涛。
Update()方法是每幀執(zhí)行一次。
畫(huà)面每渲染完一次泳猬,就是一幀批钠,每幀的時(shí)間是不固定的。
在 Update()方法中執(zhí)行物理操作得封,會(huì)出現(xiàn)卡頓的情況埋心。
場(chǎng)景視圖
關(guān)鍵代碼
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);//世界坐標(biāo)系向前力
// m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);//自身坐標(biāo)系向前力
//給Z鍵添加一個(gè)自身向前的力
if (Input.GetKeyDown(KeyCode.Z))
{
m_Rigibody.AddRelativeForce(Vector3.forward * 10, ForceMode.Force);
}
}
//物理更新方法 執(zhí)行物理操作;
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);
}
}
}
小結(jié)
瘋狂的小鳥(niǎo).jpg
剛體添加力.png
Unity API.png