中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

昌吉市| 绥滨县| 海伦市| 辽阳县| 夏邑县| 六安市| 胶南市| 郁南县| 东海县| 视频| 四会市| 泾川县| 德州市| 桦甸市| 碌曲县| 安庆市| 花莲县| 平原县| 武胜县| 外汇| 太湖县| 永福县| 和龙市| 瓮安县| 吉首市| 萨迦县| 卢龙县| 吉林市| 梅河口市| 汝州市| 玉门市| 昭通市| 冕宁县| 马山县| 九龙县| 莱芜市| 乡宁县| 大港区| 色达县| 松江区| 赫章县|