如何使用transform下的兩個函式;Translate和Rotate去影響一個非剛體物件的位置和角度。
在以下的範例,我們可以看到移動Translate的引數是一個vector3,而數值為Z軸1,X及Y為0。
另外這個範例在Unity執行時的一個frame都會運作,因為它是寫在Unpate中。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TransformFunctions : MonoBehaviour { void Start() { } void Update() { transform.Translate(new Vector3(0, 0, 1)); } }
運行Unity後可以看到物件往Z軸的方向開始移動,但它的速度非常快,畢竟它在每一個frame都會移動它的位置,所以我們可以乘上Time.deltaTime,這代表接下來移動相同距離需要1秒。
另外我們使用Vector3(0, 0, 1),但為了表示得更清楚可以使用Vector3.forword。
最後我們也可以讓移動速度變的可控,在乘上一個變數moveSpeed,腳本修改成以下的內容:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TransformFunctions : MonoBehaviour { public float moveSpeed = 10.0f; void Start() { } void Update() { transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); } }透過改變moveSpeed數值,可以注意到移動速度變的可控制了。
如果我們不想讓它自己執行移動,可以加上鍵盤輸入,使用者按下方向鍵"↑"時物件就會移動。
要往後移動同理,往後移動要給它一個負值並改為方向鍵"↓":
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TransformFunctions : MonoBehaviour { public float moveSpeed = 10.0f; void Start() { } void Update() { if(Input.GetKey(KeyCode.UpArrow)) transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.DownArrow)) transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime); } }
接著我們來看旋轉Rotate,和Translate相同帶入一個vector3,這裡我們用Vector3.up,
也就是旋轉Y軸,使用方向鍵"←"和"→"並乘上一個旋轉量值turnSpeed:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TransformFunctions : MonoBehaviour { public float moveSpeed = 10.0f; public float turnSpeed = 50.0f; void Start() { } void Update() { if(Input.GetKey(KeyCode.UpArrow)) transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.DownArrow)) transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.LeftArrow)) transform.Rotate(Vector3.up * turnSpeed * Time.deltaTime); if (Input.GetKey(KeyCode.RightArrow)) transform.Rotate(-Vector3.up * turnSpeed * Time.deltaTime); } }
最後要注意的是,如果想用Translate和Rotate移動旋轉帶有collider的物件,並且和其他物件產生物理碰撞的結果,請使用物理(physics)相關的函式才能做到,這次就到這裡。
沒有留言:
張貼留言