Unity 簡單的物體運動

Unity簡單的物體運動

物體的運動包括位置座標的改變和旋轉。下面是幾種運動常見手段的實例。

首先我們先new一個project,創建一個GameObject Cube

這裏寫圖片描述

然後開始編寫腳本

1. 平移

1.1 Transform.position

public class 移動 : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        this.transform.position += Vector3.left * Time.deltaTime;
    }
}

將該腳本掛載到Cube上,即可產生向左運動的動畫效果。

那麼這段代碼是什麼意思呢?首先position是transform中的一個屬性,包括x,y,z。x控制物體左右位置,y控制物體上下,z控制物體的遠近。Vector3.left是Vector3的一個屬性,表示的是3爲座標系中的向左的單位向量,實質和new Vector3(-1, 0, 0)是一個效果。還有right,up,down,forward,back就是類似的意思。Time.deltaTime,按照我的理解,由於unity採用的是離散仿真系統,每一秒被分離成了許多幀,而不同電腦的FTP是不同的,deltaTime就是每一幀所花的時間。所以這一條語句就是說讓被掛載的物體每秒向左移動一個單位。

1.2 Transform.translate

public class 移動 : MonoBehaviour {

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        transform.Translate(new Vector3(-1, 0, 0) * Time.deltaTime);
    }
}

效果同樣也是每秒向左移動一個單位

1.3 Vector3.MoveTowards

public class 移動 : MonoBehaviour {
    public Transform Target;
    public float Speed;

    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        float step = Speed * Time.deltaTime;
        transform.position = Vector3.MoveTowards(transform.position, Target.position, step);
    }
}

然後我們在Cube上可以看到出現了Target和Speed需要我們填寫

這裏寫圖片描述

新建一個GameObject的Sphere作爲Target,移到和Cube不同的位置,並設置Speed爲1,就可以看到Cube以每秒1單位的速度向Target移動,直到位置相同停止。

1.4 Vector3.SmoothDamp

public class 移動 : MonoBehaviour
{
    public Transform Target;
    public float smoothTime = 0.3F;
    private Vector3 velocity = Vector3.zero;
    void Update()
    {
        Vector3 targetPosition = Target.position;
        transform.position = Vector3.SmoothDamp(transform.position, targetPosition, ref velocity, smoothTime);
    }
}

這裏transform.position參數表示當前位置,targetPosition表示目標位置,ref velocity表示移動速度,
smoothTime表示期望到達目標的時間,其效果與MoveTowards類似

2. 旋轉

2.1 Rotate方法

public class 旋轉 : MonoBehaviour
{
    private void Update()
    {
        this.transform.Rotate(Vector3.up * 30 * Time.deltaTime);
    }
}

Rotate的參數意思是以自身爲中心,繞着豎直向上的軸以每秒30°的速度旋轉,運行我們就能看到一個Cube在忘情的旋轉(卡特哈哈哈哈)

2.2 RotateAround方法

public class 旋轉 : MonoBehaviour
{
    public Transform target;
    private void Update()
    {
        this.transform.RotateAround(target.position, Vector3.up, 10 * Time.deltaTime);
    }
}

設置一個GameObject對象作爲target,Cube就會繞着target,以豎直方向爲旋轉軸,10°每秒的速度旋轉(可以思考像地球繞太陽轉)

近期會寫一篇模擬太陽系的博客,感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章