Unity3D中API常用方法和類詳細講解 (Transform類)

目錄

 


Transform類


點擊這裏進入官網

該類表示的是對象的位置、旋轉和縮放。


Properties


Transform.parent

public Transform parent;

讓一個遊戲物體成爲另一遊戲物體的子對象,那麼該物體的 位置、縮放、旋轉會受到父對象的位置、縮放、旋轉的影響。

 void Start()
    {
        var tran = GameObject.Find("Sphere").transform;      
        gameObject.transform.parent = tran; // 讓當前腳本所在遊戲對象成爲 Sphere 的子對象
    }

 


Public Methods


Transform.Translate

public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Space relativeTo = Space.Self);
  • 沿着 translation 的方向移動 | translation | 的距離,其結果將應用到 relativeTo 座標系中。
  • 如果relativeTo爲空 或設置爲 Space.Self,則該 transform 則相對於自身的局部座標軸進行移動。
  • 如果relativeTo是Space.World,則該transform是相對於世界座標系進行移動。
public void Translate(float x, float y, float z);
public void Translate(float x, float y, float z, Space relativeTo = Space.Self);
  • 通過參數 x、y、z 沿着transform 的  x、y、z 軸進行移動
  • 如果將 relativeTo 省略或設置爲Space.Self,則該 transform 則相對於自身的局部座標軸進行移動。(在場景視圖中選擇對象時顯示的x,y和z軸)
  • 如果relativeTo是Space.World,則該transform是相對於世界座標系進行移動。
public void Translate(Vector3 translation, Transform relativeTo);
  • 移動 transform 在translation的方向和距離上。
  • 默認情況下,那麼它是相對於 relativeTo 的局部座標系進行移動。
  • 如果relativeTo 是 null ,那麼是相對於 relativeTo 的世界座標系進行移動。
public void Translate(float x, float y, float z, Transform relativeTo);
  • 通過參數 x、y、z 沿着transform 的  x、y、z 軸進行移動
  • 默認情況下,那麼它是相對於 relativeTo 的局部座標系進行移動。
  • 如果relativeTo 是 null ,那麼是相對於 relativeTo 的世界座標系進行移動。

Transform.Find

public Transform Find(string n);
n 需要查找的名字
  • 通常 參數 n 提供的名字進行查找。 如果沒有找到, 則返回 null。
  • 如果 n 包含 '/',它將像路徑名一樣訪問層次結構中的Transform。
  • 該操作必須在當前腳本所在的對象或者是獲得某個對象的引用查找該對象的直接子對象(激活不激活都可以),不會查找到其它對象的同名直接子對象。
  • 該操作不會在整個場景中搜索。

Transform.Rotate:

public void Rotate(Vector3 eulers, Space relativeTo = Space.Self);
public void Rotate(float xAngle, float yAngle, float zAngle, Space relativeTo = Space.Self);
  • 使用 Transform.Rotate 以各種方式旋轉 GameObjects。 第一個參數需要提供的是歐拉角 而不是 四元數。 第二個參數指示出你可以在世界座標系 還是 物體座標系中旋轉。 默認情況下,是 按物體座標系進行旋轉的。
  • 此方法的功能是使得 transform 的實例在相對參數 relativeTo 的座標系中旋轉歐拉角eulerAngles。
public void Rotate(Vector3 axis, float angle, Space relativeTo = Space.Self);
  • 其中參數 axis 爲旋轉軸方向, 參數 angle 爲旋轉角度, 參數 relativeTo 爲參考座標系, 默認爲Space.self.
  • 此方法的功能是使得 Gameobject 對象在 relativeTo 座標系中繞軸向量 axis 旋轉 angle 度。若想使Gameobject對象實例繞着某個物體旋轉, 請用Transform.RotateAround

Public Methods


全局座標系 和 局部座標系 之間的相互轉換


點擊這裏進入官網

Transform.Translate

public void Translate(Vector3 translation);
public void Translate(Vector3 translation, Space relativeTo = Space.Self);
  • 沿着 translation 的方向移動 | translation | 的距離,其結果將應用到 relativeTo 座標系中。
  • 如果relativeTo爲空 或設置爲 Space.Self,則該 transform 則相對於自身的局部座標軸進行移動。
  • 如果relativeTo是Space.World,則該transform是相對於世界座標系進行移動。

可以通過以下操作來進行 全局座標系 和 局部座標系 之間的轉換:

Transform.TransformPoint: ( 局部 ——》 全局)

public Vector3 TransformPoint(Vector3 position);
  • 將一個座標點從局部座標系轉換到全局(世界)座標系。
  • 請注意,返回的位置會受 scale 影響。 如果要處理方向,請使用 Transform.TransformDirection
public Vector3 TransformPoint(float x, float y, float z);
  • 將位置x、y、z從局部空間轉換爲世界空間。

Transform.InverseTransformPoint:(全局——》 局部

public Vector3 InverseTransformPoint(Vector3 position);
  • 將某個座標點從 全局(世界)座標系轉換到局部座標系。
  • 此函數基本上與Transform.TransformPoint相反,後者用於從局部座標系轉換到全局(世界)座標系。
  • 請注意,返回的位置會受 scale 影響。 如果要處理方向,請使用 Transform.InverseTransformDirection 
public Vector3 InverseTransformPoint(float x, float y, float z);
  • 將某x、y、z 表示的座標點從 全局(世界)座標系轉換到局部座標系。

 

Transform.TransformDirection:( 局部 ——》 全局)

public Vector3 TransformDirection(Vector3 direction);
  • 將一個方向局部座標系轉換到全局座標系。
  • 此操作不受transform 的 scale 或 position 的影響。返回的向量與 direction 有同樣的長度。
public Vector3 TransformDirection(float x, float y, float z);
  • 將 x、y、z方向從局部空間轉換爲世界空間。

Transform.InverseTransformDirection (全局——》 局部

public Vector3 InverseTransformDirection(Vector3 direction);
  • 將一個方向從全局座標系轉換到局部座標系。
  • 和 Transform.TransformDirection 相反。
  • 此操作不受 scale 影響。
  • 如果vector 表示的是空間中的某一個位置而不是方向,則應使用 Transform.InverseTransformPoint
public Vector3 InverseTransformDirection(float x, float y, float z);
  • 將某個方向的 x, y, z從世界空間變換到局部空間。

 

Transform.TransformVector (局部 ——》 全局)

public Vector3 TransformVector(Vector3 vector);
  • 將一個向量從局部座標系轉換到全局座標系。
  • 此操作不受 transform 位置的影響,但受 scale 影響。 返回的新向量可能與原向量不同的長度。
public Vector3 TransformVector(float x, float y, float z);
  • 將向量 x, y, z從局部空間變換到世界空間。

Transform.InverseTransformVector (全局 ——》局部)

public Vector3 InverseTransformVector(Vector3 vector);
  • 將一個向量從全局座標系轉換到局部座標系。
  • 是與 Transform.TransformVector. 相反的。
  • 此操作受 scale 影響。
public Vector3 InverseTransformVector(float x, float y, float z);
  • 一個向量(x, y, z)從世界座標空間到局部座標空間。這個操作與Transform.TransformVector相反。
  • 此操作受 scale 影響。

Transform.forward, Transform.right, Transform.up:

  • 當前物體的物體座標系的z軸,x軸,y軸在世界座標系上的指向
  • Vector3.forward ,(0,0,1)的縮寫在 transform.Translate() 中使用時,如果不表明座標系,則爲物體的局部座標,即物體自身的正前方。
  • Vector3.right,(1,0,0)的縮寫。 Vector3.up ,(0,1,0)的縮寫。

屏幕座標系與全局座標系之間的相互轉換


點擊這裏進入官網

Camera.ScreenToWorldPoint

public Vector3 ScreenToWorldPoint(Vector3 position);
  • 將屏幕座標轉換爲世界座標。
  • 屏幕空間的座標是以像素來表示的。屏幕左下角爲(0,0); 右上角是 ( pixelWidth,pixelHeight ). 
  • z的 位置是以世界單位衡量的到 Camera 的距離。

 

Camera.WorldToScreenPoint 

public Vector3 WorldToScreenPoint(Vector3 position);
public Vector3 WorldToScreenPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);
  • 全局座標轉換爲屏幕座標。
  • 屏幕空間的座標是以像素來表示的。屏幕左下角爲(0,0); 右上角是 ( pixelWidth,pixelHeight ). 
  • z的 位置是以世界單位衡量的到 Camera 的距離。

Input.mousePosition:

public static Vector3 mousePosition;
  • 獲得鼠標在屏幕座標系中的座標(只讀),它是以像素爲單位的。
  • 屏幕或窗口的左下角是(0,0)。 屏幕或窗口的右上角位於(Screen.width,Screen.height)。
  • 注意:即使鼠標不在 Game 視圖中,也會返回鼠標的位置,例如,即使當 Cursor.lockState 設置爲  CursorLockMode.None時也是如此。當以窗口模式運行且光標未被限制時,小於0或大於屏幕尺寸(Screen.width,Screen.height)的位置值表示鼠標光標在遊戲窗口之外。

 


屏幕座標系與視口座標系之間的相互轉換


Camera.ScreenToViewportPoint

public Vector3 ScreenToViewportPoint(Vector3 position);
  • 屏幕座標轉換爲視口座標。
  • 屏幕座標的座標是以像素來表示的。屏幕左下角爲(0,0); 右上角是 ( pixelWidth,pixelHeight ). 
  • z的 位置是以世界單位衡量的到 Camera 的距離。

Camera.ViewportToScreenPoint

public Vector3 ViewportToScreenPoint(Vector3 position);
  1. 視口座標轉換爲屏幕座標
  2. 視口座標是相對於Camera 的  normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
  3. z 的 位置是以世界單位衡量的到 Camera 的距離。

 


全局座標系與視口座標系 之間的相互轉換


Camera.WorldToViewportPoint

public Vector3 WorldToViewportPoint(Vector3 position);
public Vector3 WorldToViewportPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);
  • 全局座標轉換爲視口座標
  • 視口座標是相對於Camera 的  normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
  • z 的 位置是以世界單位衡量的到 Camera 的距離。

Camera.ViewportToWorldPoint

public Vector3 ViewportToWorldPoint(Vector3 position);
  • 視口座標轉換爲全局座標。
  • 視口座標是相對於Camera 的  normalized 的。Camera 的左下角是(0,0); 右上角是(1,1)。
  • z 的 位置是以世界單位衡量的到 Camera 的距離。
  • 請注意,ViewportToWorldPoint 將x-y屏幕位置轉換爲3D空間中的x-y-z位置。

Transform.LookAt

public void LookAt(Transform target);
public void LookAt(Transform target, Vector3 worldUp = Vector3.up);
target 要指向的對象
worldUp Vector 指定向上的方向。

旋轉 transform,使向前的向量指向/ target /的當前位置。簡單說,旋轉物體使z軸指向目標物體。

當該物體設置了LookAt並指定了目標物體時,該物體的z軸將始終指向目標物體,在設置了worldUp軸向時,該物體在更接近指定的軸向使旋轉便的靈活,注意worldUp指的是世界空間,不論你物體在什麼位置,只要接近指定的軸方向,旋轉會變的更靈活。

Transform.localPosition:

public Vector3 localPosition;
  • 可以通過 transform.localPosition 取得一個物體在其父物體的局部座標系中的座標
  • 如果該遊戲物體沒有父物體,那麼 transform.localPosition 獲得的依然是該物體在全局座標系中的座標。
  • 如果該物體有父物體,則獲得是在其父物體的局部座標系中的座標。此時 檢視視圖中顯示的爲 localPosition 的值。

Transform.SetParent

public void SetParent(Transform p);
public void SetParent(Transform parent, bool worldPositionStays);
  • 將 遊戲對象 P 的 transform 變成 當前對象的父對象。
  • 第二個參數,如果沒有 或者 爲  true時, 它與 Transform.Parent 效果是一樣的,即 當前對象 的transform 會變成其 父對象的局部座標系中的座標。
  • 如果第二個參數爲false, 那麼當前遊戲對象還是會變成 P 的 子對象, 但是其座標不再是相對於父對象的局部座標。 而是其自身世界座標位置 (意思就是說,雖然變成了子對象,但是座標並沒有被改變)。

 

 

發佈了209 篇原創文章 · 獲贊 73 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章