亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity3d uGUI中世界坐標與屏幕坐標實際運用

發布時間:2020-03-02 21:59:03 來源:網絡 閱讀:13929 作者:taotaoma456 欄目:游戲開發

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

該模式沒有研究過,暫不討論。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东丰县| 鹿泉市| 桐庐县| 南城县| 南京市| 梁平县| 上犹县| 阳信县| 石屏县| 天门市| 台安县| 凤山县| 苏尼特右旗| 托里县| 大城县| 屯留县| 颍上县| 紫金县| 康平县| 中山市| 渝中区| 桑日县| 和田县| 哈密市| 科技| 铅山县| 盱眙县| 五常市| 巴林右旗| 开原市| 深水埗区| 安西县| 谷城县| 兴仁县| 民县| 麦盖提县| 红河县| 阿拉善右旗| 金寨县| 稻城县| 无为县|