2015年10月5日 星期一

【Unity】rigidbody物件移動 AddForce與velocity

今天來談帶有rigidbody物件移動的方法,AddForce和velocity。
首先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,在按下空白鍵時,給物體一個向右的外力。
實際執行是這樣:
rigidbody, Unity, AddForce, velocity,

值得注意的是,使用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的次數給印出來,每一秒施力一次,結果如下:
rigidbody, Unity, AddForce, velocity,

rigidbody, Unity, AddForce, velocity,

接著來看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,結果如下:
rigidbody, Unity, AddForce, velocity,

當然直接改變velocity,與AddForce的施加外力不同,不會因為質量影響初速度。
相同速度,拿質量1和500來看撞到牆的時間:
rigidbody, Unity, AddForce, velocity,

以上就是修改AddForce和velocity的差別,當然哪邊比較適合就是看個人的狀況了,這次就到這裡。

2 則留言:

  1. 謝謝大大分享,之前用AddForce的方式,一直無法讓物體停下,今天用了velocity後就成功了~

    回覆刪除

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...