實際開發中,我們經常會遇到需要3D與2D坐標轉換的問題,比如血條同步跟隨人物移動、傷害數字在人物頭上出現、從2D背包中拖動一個UI到3D物體上等情況,這些其實本質上都是3D坐標與UI坐標轉換的問題。
1.核心思想3D坐標轉成UI坐標其實就是先轉成屏幕坐標,再由屏幕坐標轉換成UI坐標。
所以坐標轉換分為三個部分
其中Unity的屏幕坐標系規定,左下角是原點,X軸向右是正方向,Y軸向上是正方向。
作為額外補充的一個知識點,GUI的坐標系規定左上角是原點,X軸向右為正方向,Y軸向下為正方向,跟屏幕坐標是不一樣的,但是此篇我們用不到這個知識點。
這裡UI坐標指的是UGUI的坐標,所以我們在計算的時候就需要用的Canvas相關的參數
2.代碼示例在此以血條跟隨人物移動為需求,完成坐標轉換的核心代碼
using UnityEngine;
public class HPFollow : MonoBehaviour{ public Transform heroHeadTrans; public Camera mainCamera;
public RectTransform hpTrans;
public RectTransform canvasTrans;
void Update() { Vector2 screenPoint = RectTransformUtility.WorldToScreenPoint(mainCamera, heroHeadTrans.position);
Vector2 localPoint;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasTrans, screenPoint, mainCamera, out localPoint)) { hpTrans.anchoredPosition = localPoint; } }}
別忘了修改Canvas的RenderMode
血條跟隨人物移動效果如下
聲明:發布此文是出於傳遞更多知識以供交流學習之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與我們聯繫,我們將及時更正、刪除,謝謝。
作者:StarryFun
來源:https://zhuanlan.zhihu.com/p/82921419
More:【微信公眾號】 u3dnotes