FairGUI 座標和Unity座標轉換

2021-10-16 12:19:16 字數 2059 閱讀 5836

一、fairgui教程文件(

fairygui是以螢幕左上角為原點的,unity的螢幕座標是以左下角為原點的。一般這個轉換都不需要開發者干預,如果確實需要進行這兩者的轉換,可以用:

//unity的螢幕座標系,以左下角為原點

vector2 pos = input.mouseposition;

//轉換為fairygui的螢幕座標

pos.y = screen.height - pos.y;

gobject裡的x/y/position值都是區域性座標,也就是相對于父元件的偏移。gobject沒有提供直接的屬性獲得物件的全域性座標,但提供了方法進行轉換。

請注意:乙個物件,本地(local)座標的原點是(0,0),不是(x,y),(x,y)是在父元件的座標,不是自己的本地座標。

如果要獲得任意乙個ui元件在螢幕上的座標,可以用:

vector2 screenpos = aobject.localtoglobal(vector2.zero);

(注意,這裡說的螢幕,是指fairygui語義中的螢幕,是以螢幕左上角為原點的,不是指unity語義中的螢幕)

相反,如果要獲取螢幕座標在ui元件上的區域性座標,可以用:

vector2 localpos = aobject.globaltolocal(screenpos);

如果有ui適配導致的全域性縮放,那麼邏輯螢幕大小和物理螢幕大小不一致,邏輯螢幕的座標就是groot裡的座標。如果要進行區域性座標與邏輯螢幕座標的轉換,可以用:

//物理螢幕座標轉換為邏輯螢幕座標

vector2 logicscreenpos = groot.inst.globaltolocal(screenpos);

//ui元件座標與邏輯螢幕座標之間的轉換

aobject.localtoroot(pos);

aobject.roottolocal(pos);

注意,我們在編輯器裡定義的,**裡處理的,一般就是指這個邏輯螢幕座標。

如果要轉換任意兩個ui物件間的座標,例如需要知道a裡面的座標(10,10)在b裡面的位置,可以用:

vector2 posinb = aobject.transformpoint(new vector2(10,10), bobject);

如果要轉換世界空間的座標到ui裡的座標,需要先將世界空間的座標轉換為螢幕座標,再繼續轉換,例如:

vector3 screenpos = camera.main.worldtoscreenpoint(worldpos);

//原點位置轉換

screenpos.y = screen.height - screenpos.y;

vector2 pt = groot.inst.globaltolocal(screenpos);

如果要轉換ui裡的座標到世界空間的座標,需要先將ui裡的座標轉換為螢幕座標,再繼續轉換,例如:

vector2 screenpos = groot.inst.localtoglobal(pos);

//原點位置轉換

screenpos.y = screen.height - screenpos.y;

一般情況下,還需要提供距離攝像機視野正前方distance長度的引數作為screenpos.z(如果需要,將screenpos改為vector3型別)

vector3 worldpos = camera.main.screentoworldpoint(screenpos);

二、 遊戲例項使用

private gobject tpoint = null;//fairgui 控制項

vector2 screenpos = groot.inst.localtoglobal(tpoint.localtoroot(vector2.zero, groot.inst)); groot.inst);有適配問題有適配問題

screenpos.y = screen.height - screenpos.y;

vector3 position = camera.screentoworldpoint(screenpos);

unity 座標處理

原文 world space 世界座標 我們在場景中新增物體 如 cube 他們都是以世界座標顯示在場景中的。transform.position可以獲得該位置座標。screen space 螢幕座標 以畫素來定義的,以螢幕的 左下角為 0,0 點,右上角為 screen.width,screen....

unity 座標系轉換 unity座標系間的轉換

1.世界座標系 遊戲內物件都在乙個世界座標系內,可以放心的使用世界座標進行transform的運算。2.區域性座標系 基於父物體的座標系,適合基於父物體做的transform運算,運算時要確保兩個物件在乙個本地座標系內。recttransform的width和height是本地座標系,需要求寬高的世...

Unity 世界座標與本地座標

你在物體元件上看到的就是本地座標,是相對于父物體的座標。在 中用transform.position獲得的是世界座標,所以不一定等於你在元件上看到的值。transform.rotation的旋轉值範圍為 1 1 對應著 180 180 transform.rotation值是float型別的,當你想...