首先AddForce,是在物體上給予一個方向的外力,是這樣寫的:
using UnityEngine;
using System.Collections;
public class Control : MonoBehaviour {
private Rigidbody rb;
void Start () {
rb = GetComponent ();
}
void FixedUpdate () {
if (Input.GetKeyDown (KeyCode.Space))
rb.AddForce (Vector3.right * 10);
}
}
掛在物體上的script,在按下空白鍵時,給物體一個向右的外力。實際執行是這樣:
值得注意的是,使用AddForce時會受到物體質量影響:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Control : MonoBehaviour {
private Rigidbody rb;
public Text text;
private int count;
void Start () {
rb = GetComponent<Rigidbody> ();
count = 0;
}
float timer = 0;
void FixedUpdate () {
text.text ="質量:" + rb.mass + " 施力次數:" + count.ToString();
timer += Time.deltaTime;
if (timer > 1.0f) {
rb.AddForce (Vector3.right * 10);
count++;
timer = 0;
}
}
}
將質量及施力次數,也就是AddForce的次數給印出來,每一秒施力一次,結果如下:
接著來看velocity,修改velocity時,會給物體一個向量值,這個值就是物體當下的速度,是這樣寫的:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Control : MonoBehaviour {
private Rigidbody rb;
void Start () {
rb = GetComponent<Rigidbody> ();
}
void FixedUpdate () {
if (Input.GetKeyDown (KeyCode.Space)) {
rb.velocity = Vector3.right * 10;
}
}
}
按下空白鍵時直接修改velocity,結果如下:當然直接改變velocity,與AddForce的施加外力不同,不會因為質量影響初速度。
相同速度,拿質量1和500來看撞到牆的時間:





感謝分析
回覆刪除謝謝大大分享,之前用AddForce的方式,一直無法讓物體停下,今天用了velocity後就成功了~
回覆刪除