91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

永春县| 诸暨市| 汶上县| 阜南县| 舞钢市| 玉林市| 中山市| 改则县| 兰坪| 和田县| 布拖县| 达孜县| 昆山市| 宜兰县| 海阳市| 道孚县| 靖宇县| 漳平市| 夏津县| 柯坪县| 乡城县| 湘乡市| 郁南县| 登封市| 临邑县| 齐齐哈尔市| 新化县| 阳新县| 丰县| 湘西| 桐柏县| 阿拉善左旗| 阿巴嘎旗| 淄博市| 四平市| 夏河县| 易门县| 彩票| 大竹县| 赞皇县| 杂多县|