uGUI元素顯示在角色的頭頂上,ugui元素角色頭頂
孫廣東 2015.5.26
轉載請註明出處:http://blog.csdn.net/u010019717
我們 遊戲完全使用UGUI來工作,所以遊戲中的很多元素都是UGUI的 Game Canvas畫布設定為;World Space , 主要也是為了以後一下牛叉的效果
還有一個UI Canvas畫布設定為;Screen Space - Overlay 就是這些元素會在最前方,在螢幕上的。
還有一組是:Spines Layer, 主要是放著spine製作的角色
2種解決方案:
第一種是 為角色建立子物件了類型是Canvas畫布,Unity的官方案例是這麼做的,可以自己去看看。這樣在Hierarchy上是有上下級的層級關係的。
這種的話,Canvas的類型最簡單是設定為:Screen Space - Overlay
第二種呢,其實也很簡單,就是我得到角色的位置position, 然後轉換為螢幕座標系,然後在轉換為UGUI所在畫布和相機的座標系即可,得到了這個就賦值給UI即可了。但是這樣在Hierarchy上是沒有上下級的層級關係的。一個屬於Game Canvas畫布,一個在Spines Layer中,但是角色會有UI的引用。
Vector3 first = ExploreBattleManager.Instance.MainCamera.GetComponent<Camera>().WorldToScreenPoint(transform.position); //把角色在主攝像機的全局座標轉化為螢幕座標[註:first的結果的z值是原來全局座標的z] first = new Vector3(first.x, first.y, 100);// 設定這個z的意思是想讓角色的位置映射到UICamera的多遠距離的平面上。 這裡我們希望映射到Game Canvas畫布相對於相機的距離,怎麼看?如果是Screen Space - Camera的話就是如的Plane Distance值了。 如果是World Space :值就是兩個z值的差了: skillList.transform.position = ExploreBattleManager.Instance.UICamera.GetComponent<Camera>().ScreenToWorldPoint(first);