一 、世界坐標系--全局坐標系:
用來描述游戲場景內所有物體位置和方向的基準,也稱為世界坐標系。
Unity場景中創建的物體都是以全局坐標系中的坐標原點(0,0,0)來確定各自的位置
二、局部坐標系(物體坐標系,模型坐標系)
每個物體都有其獨立的物體坐標系,并且隨物體進行相同的移動或者旋轉。
局部坐標系:是相對于父物體來說也就是當兩個游戲對象互為父子關系,那么子物體會以父物體的坐標點為自身的坐標原點。
下面我們來看看我們的局部坐標和全局坐標的不同吧。首先我們將腳本掛載在子物體上,然后在腳本上寫上我們的代碼輸出坐標。
我們再看看其打印結果看是否正確
三、相機坐標系:
根據觀察位置和方向建立坐標系。(UGUI會詳細講述)
使用次此坐標可以方便判斷物體是否在相機前方,以及物體間的先后遮擋順序,它會優先渲染離他最近的物體。
它會優先渲染離他最近的物體。
四、屏幕坐標系:Screen Space
建立在屏幕上的二位坐標系,用來描述像素在屏幕上的位置。(像素在補充課件里面)以像素定義,以屏幕左下角為坐標原點(0,0),
右上角為(Screen.width,Screen.height),Z的位置是以相機的世界坐標位置來衡量的。
在我們手機、電腦都是有屏幕的,它的左下角就是屏幕坐標的原點。當然我們的屏幕坐標是二維的只有X,Y軸
世界坐標→屏幕坐標
camera.WorldToScreenPoint(obj.transform.position)
下面我們來看看如何使用吧,首先我們給攝像機掛載一個腳本,然后開始寫我們的代碼。
其他坐標系之間的轉換
坐標系的轉換:
1、局部坐標系轉換到全局坐標系:
Transform.TransformPoint()
首先我們創建一個腳本讓其掛載在我們的子物體上。
全局坐標系轉換到局部坐標系:
Transform.InVerseTransformPoint()
首先我們創建一個腳本讓其掛載在我們的子物體上。
打印結果:
向量如何轉為局部坐標系呢?
Transform.TransformDirection
向量如何轉為全部坐標系呢?
Transform. InVerseTransformDirection
五、View port Space 視口坐標
視口坐標是標準的和相對于相機的。相機的左下角為(0,0)點,右上角為(1,1)點,
Z的位置是以相機的世界單位來衡量的。
屏幕坐標→視口坐標
camera.ScreenToViewportPoint(Input.GetTouch(0).position)
世界坐標→視口坐標
camera.WorldToViewportPoint(obj.transform.position));
六、GUI界面坐標系
這個坐標系與屏幕坐標系相似,不同的是該坐標系以屏幕的左上角為(0,0)點,右下角為(Screen.width,Screen.height)。
print("世界坐標" + obj.transform.position);
print("屏幕坐標" + Input.GetTouch(0).position);