首先AddForce,是在物體上給予一個方向的外力,是這樣寫的:
using UnityEngine; using System.Collections; public class Control : MonoBehaviour { private Rigidbody rb; void Start () { rb = GetComponent掛在物體上的script,在按下空白鍵時,給物體一個向右的外力。(); } void FixedUpdate () { if (Input.GetKeyDown (KeyCode.Space)) rb.AddForce (Vector3.right * 10); } }
實際執行是這樣:
值得注意的是,使用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後就成功了~
回覆刪除