在Unity里面Transform組件是有兩個重要的作用,一個是表示在坐標系的位置,旋轉和縮放,另外一個是GameObject的父節點是通過Transform組件來維持,Transform類是繼承了IEnumerable接口,它也是一個集合的類型,可以通過foreach語句來遍歷它的子對象。
先來看看他的成員變量和函數:
一、成員變量
position:在世界空間坐標transform的位置。
localPosition:相對於父級的變換的位置。如果該變換沒有父級,那么等同於Transform.position。
eulerAngles:世界坐標系中的旋轉(歐拉角)。
localEulerAngles:相對於父級的變換旋轉角度。
right:世界坐標系中的右方向。(世界空間坐標變換的紅色軸。也就是x軸。)
up:世界坐標系中的上方向。(在世界空間坐標變換的綠色軸。也就是y軸。)
forward:世界坐標系中的前方向。(在世界空間坐標變換的藍色軸。也就是z軸。)
rotation:世界坐標系中的旋轉(四元數)。
localRotation:相對於父級的變換旋轉角度。
localScale:相對於父級的縮放比例。
parent:父對象Transform組件。
worldToLocalMatrix:矩陣變換的點從世界坐標轉為自身坐標(只讀)。
localToWorldMatrix:矩陣變換的點從自身坐標轉為世界坐標(只讀)。
root:對象層級關系中的根對象的Transform組件。
childCount:子對象數量。
lossyScale:全局縮放比例(只讀)。
二、成員函數
Translate:向某方向移動物體多少距離。
Rotate:按照指定歐拉角旋轉。
RotateAround:按照多少度在世界坐標的某位置軸旋轉物體。
LookAt:旋轉物體使z軸指向目標物體。
TransformDirection:將一個方向從局部坐標變換到世界坐標方向。
InverseTransformDirection:將一個方向從世界坐標變換到局部坐標方向。
TransformPoint、InverseTransformPoint。
Description:與所有子物體解除父子關系。
Find:通過名字查找子物體並返回它。如果沒有查找到子物體名字,將返回null。如果名字包含“/”字符它將向路徑一樣穿越層次。
Transform組件最常見的用法是作為坐標系的位置來使用,如下代碼所示:
// 向前移動 transform.Translate(Vector3.forward * Time.deltaTime * 3) // 繞自身坐標Y軸旋轉 transform.Rotate(Vector3.up * Time.deltaTime * 30) // 繞世界坐標Y軸旋轉 transform.RotateAround(Vector3.zero, Vector3.up, Time.deltaTime * 30)
作為父節點來使用通常會用於遍歷獲取自對象,如:
void Start() { //Loop through children foreach (Transform child in transform) { //If the child is not a triggerer if (child.name != "SpawnTriggerer" && child.name != "ResetTriggerer") { //Add it to the elements list, and deactivate it elements.Add(child.gameObject); EnableDisable(child.gameObject, false); } } }