1, World Space(世界坐标):
我們在場景中添加物體(如:Cube),他們都是以世界坐标顯示在場景中的。transform.position可以獲得該位置坐标。
2, Screen Space(螢幕坐标):
以像素來定義的,以螢幕的左下角為(0,0)點,右上角為(Screen.width,Screen.height),Z的位置是以相機的世界機關來衡量的。
注:滑鼠位置坐标屬于螢幕坐标,Input.mousePosition可以獲得該位置坐标,手指觸摸螢幕也為螢幕坐标,Input.GetTouch(0).position可以獲得單個手指觸摸螢幕坐标。
ViewPort Space(視口坐标):視口坐标是标準的和相對于相機的。相機的左下角為(0,0)點,右上角為(1,1)點,Z的位置是以相機的世界機關來衡量的。(用的不多,反正我暫時沒有用到~呵呵~)
3, 繪制GUI界面的坐标系:
這個坐标系與螢幕坐标系相似,不同的是該坐标系以螢幕的左上角為(0,0)點,右下角為(Screen.width,Screen.height)。
世界坐标→螢幕坐标:camera.WorldToScreenPoint(transform.position);這樣可以将世界坐标轉換為螢幕坐标。其中camera為場景中的camera對象。
螢幕坐标→視口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);這樣可以将螢幕坐标轉換為視口坐标。其中camera為場景中的camera對象。
視口坐标→螢幕坐标:camera.ViewportToScreenPoint();
視口坐标→世界坐标:camera.ViewportToWorldPoint();
案例1——在滑鼠點選的位置上繪制一張圖檔出來(關于繪制GUI界面坐标系與螢幕坐标系之間的關系)。
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
//圖檔
public Texture img;
//儲存滑鼠的位置坐标
private Vector2 pos;
void OnGUI()
{
//滑鼠左擊,擷取目前滑鼠的位置
if (Input.GetMouseButton(0))
{
pos = Input.mousePosition;
}
//繪制圖檔
GUI.DrawTexture(new Rect(pos.x,Screen.height - pos.y,100,100), img);
}
}
案例2——坐标顯示和坐标轉換(這個是觸摸方面的。如果沒有觸摸屏,那就将那個if去掉吧!)
using UnityEngine;
using System.Collections;
public class test: MonoBehaviour {
//場景的相機,拖放進來
public Camera camera;
//場景的物體
private GameObject obj;
void Start()
{
//初始化
obj = GameObject.Find("Plane");
}
void Update ()
{
//有觸摸
if (Input.touchCount > 0)
{
print("世界坐标" + obj.transform.position);
print("螢幕坐标" + Input.GetTouch(0).position);
print("世界坐标→螢幕坐标" + camera.WorldToScreenPoint(obj.transform.position));
print("螢幕坐标→視口坐标" + camera.ScreenToViewportPoint(Input.GetTouch(0).position));
print("世界坐标→視口坐标" + camera.WorldToViewportPoint(obj.transform.position));
}
}
}