您好,登錄后才能下訂單哦!
uGUI中我們首先需要選擇一種Canvas的渲染模式,包括Screen Space - Overlay,Screen Space - Camera和World Space。
Screen Space - Overlay
在該模式下,世界坐標(transform.Position)和屏幕坐標是重合的,即左下為(0,0),右上為(screen.width,screen.height).因此,在該模式下進行屏幕相關的操作時非常方便的。
Screen Space - Camera
在沒有設置Camera時,它和Screen Space - Overlay是一樣的。
在設置了Camera時,世界坐標(transform.Postion)和它的Camera相關,在正交相機投影時與Size有關;在透視投影時與FOV和Plane Distance相關,具體參見
http://quick007.blog.51cto.com/7454007/1767700
很多時候我們需要對屏幕坐標進行操作,比如處理鼠標或者touch輸入還有就是我們需要計算UI是否超出屏幕邊框,來計算UI的顯示位置。
我們這里以計算UI顯示位置為例,首先我們需要得到UI在屏幕中的位置使用世界坐標→屏幕坐標:camera.WorldToScreenPoint(transform.position);來得到對應的屏幕坐標,然后需要得到UI的大小使用rect transform獲得rect的width和height,注意,該width和height可能并不是UI相對于屏幕的寬和高,因為該值uGUI是根據Canvas的的寬高進行計算的。我們需要對width和height都乘以Canvas.scaleFactor來獲得相對于屏幕分辨率的UI大小。(該計算同樣適用于Screen Space - Overlay)
現在我們已獲取到UI的位置和大小,接下來就可以根據它們來計算UI是否超出屏幕來調整UI的位置。
最后,將計算得到的UI屏幕坐標轉換為世界坐標賦值給transform.Position.
屏幕坐標→世界坐標:camera.ScreenToWorldPoint(transform.position);
注意,該模式下會對動態腳本生成的UI組件進行LocalScale設置,需要你設置setParent后把它重置為Vector3.one,不然UI的大小可能不是你預期的。比如,在正交投影下,camera的 size為5,canvas的heitht為1000, 那么scale會被自動設置為height/(size*2)即100.至于為什么unity會這樣做,不是很清楚,望知道的大蝦不嗇賜教。
World Space
該模式沒有研究過,暫不討論。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。