在不同的情況下使用不同的座標系更加方便,所以在Unity中有多種座標系:
- 全局座標系 World Coordinate System
- 局部座標系 Local Coordinate System
- 屏幕座標系 Screen Space
- 視口座標系 ViewPort Space
全局座標系
全局座標系是用於描述場景內所有物體位置的方向的基準,也稱爲世界座標系。
在Unity中創建的物體都是以全局座標系中的座標原點(0,0,0),來確定各自的位置的。
可以使用transform.position來獲取遊戲對象的世界座標。
局部座標系
局部座標系也稱爲模型座標系或物體座標系。
每個物體都有自身獨立的物體座標系。當物體移動或改變方向時,和該物體相關聯的座標系將隨之移動或改變方向。
模型Mesh保存的頂點座標均爲局部座標系下的座標。
本地座標
transform.localPosition(本地座標)可以獲得物體在父物體的局部座標系中的位置點。
父子關係,子物體以父物體的座標點爲自身的座標原點。
如果該遊戲物體沒有父物體,那麼 transform.localPosition獲得的依然是該物體在全局座標系中的座標。
如果該物體有父物體,則獲得是在其父物體的局部座標系中的座標。
檢視視圖中顯示的爲localPosition的值。
屏幕座標系
屏幕座標系是建立在屏幕上的二維座標系。
以像素來定義的,屏幕的左下角爲(0,0),右 上角爲(Screen.width, Screen.height),z軸的座標是相機的世界座標中z軸座標的負值。
鼠標位置座標屬於屏幕座標,通過Input.mousePosition可以獲得該位置的座標。
手指觸摸屏幕也爲屏幕座標,Input.GetTouch(0).position可以獲得單個手指觸摸屏幕時手指的座標。
視口座標系
視口座標系是將Game視圖的屏幕座標系單位化,左下角(0,0),右上角(1,1)。z軸的座標是相機的世界座標中z軸座標的負值。
座標系之間的關聯與相互轉換
全局座標系和局部座標系
關聯:
transform.Translate(translation:Vector3, relativeTo: Space = Space.Self);
沿着translation的方向移動|translation|的距離,其結果將應用到relativeTo座標系中。如果relativeTo爲空,則默認爲局部座標系。
轉換:
Transform.TransformPoint(Vector3 position) :將一個座標點從局部座標系轉換到全局座標系。
Transform.InverseTransformPoint(Vector3 position):將座標點從全局座標系轉換到局部座標系。
Transform.TransformDirection(Vector3 direction):將一個方向從局部座標系轉換到全局座標系。
Transform.InverseTransformDirection(Vector3 direction):將一個方向從全局座標系轉換到局部座標系。
Transform.TransformVector(Vector3 vector):將一個向量從局部座標系轉換到全局座標系。
Transform.InverseTransformVector(Vector3 vector):將一個向量從全局座標系轉換到局部座標系。
其他:
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(Vector3 position): 將屏幕座標轉換爲全局座標。
Camera.WorldToScreenPoint(Vector3 position):將全局座標轉換爲屏幕座標。
Input.mousePosition:獲得鼠標在屏幕座標系中的座標。
屏幕座標系與視口座標系
轉換:
Camera.ScreenToViewportPoint(Vector3 position):將屏幕座標轉換爲視口座標。
Camera.ViewportToScreenPoint(Vector3 position):將視口座標轉換爲屏幕座標。
全局座標系與視口座標系
轉換:
Camera.WorldToViewportPoint(Vector3 position):將全局座標轉換爲視口座標。
Camera.ViewportToWorldPoint(Vector3 position):將視口座標轉換爲全局座標。