如何使用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)相關的函式才能做到,這次就到這裡。




沒有留言:
張貼留言