【Unity】【UGUI】對映3D座標到UI上(血條、人物狀態)
阿新 • • 發佈:2020-12-28
技術標籤:學習總結遊戲開發UnityUnityUGUI入門UI
前言:
把3D座標對映到UI上,這種操作多用於類似血條、人物名之類的東西:
這種其實是可以整個通用的方法來解決的:通過3D座標直接修改UI控制元件的位置:
正文:
需求很明瞭簡潔,所以直接上程式碼:
/// <summary> /// 通過世界座標設定UI的位置 /// </summary> /// <param name="rectTransform"></param> /// <param name="worldPos"></param> public static void Do_SetUIPositionByWorldPos(this RectTransform rectTransform, Vector3 worldPos) { if (rectTransform == null) return; if (uiCamera == null) return; Vector3 screenPos = worldCamera.WorldToScreenPoint(worldPos); // Z小於0,代表在相機後面,此時X、Y反向; if (screenPos.z < 0) { screenPos.x *= -1; screenPos.y *= -1; } Vector3 uiWorldPos = uiCamera.ScreenToWorldPoint(screenPos); rectTransform.position = uiWorldPos; rectTransform.Do_SetLocalPosZ(0); } public static void Do_SetLocalPosZ(this Transform t, float z) { Vector3 localPos = t.localPosition; localPos.z = z; t.localPosition = localPos; }
上文中的worldCamera 是指照3D物體的相機。
uiCamera是指照射UI的相機。
注意區分。
PS:
這個方法要放在一個靜態類裡,如果不明白這種寫法可以去搜索C#類擴充套件。
PS2:
我感覺這個方法並不是效能最優,後面還以再研究怎麼優化。