Unity HUD座標轉換

隨便找個腳本掛着

using UnityEngine;
class HudTest: MonoBehaviour
{
    public RectTransform hud;       //Hud
    public RectTransform uiParent;  //Hud所在的ui節點
    public Transform followTarget;  //跟隨的3D物體
    public Camera sceneCamera;      //場景攝像機
    public Camera uiCamera;         //ui攝像機
    public float distance = 10;     //默認距離相機的距離,自己調

    void Update()
    {
        if (followTarget == null) return;
        Vector3 parentPos_3D = followTarget.position + new Vector3(0, 1, 0);
        World2UI(parentPos_3D, uiParent, hud);
        float newDistance = DistCameraByPos(followTarget.position);
        hud.localScale = Vector3.one * distance / newDistance;
    }

    //世界座標轉成UI中父節點的座標, 並賦值位置
    public void World2UI(Vector3 cusWorldPos, RectTransform cusUiParent, RectTransform cusUiTarget)
    {
        //世界座標轉化爲屏幕座標
        Vector3 _screenPos = sceneCamera.WorldToScreenPoint(cusWorldPos);
        //只取屏幕座標xy軸
        Vector2 _tempV2 = new Vector2(_screenPos.x, _screenPos.y);
        Vector2 _retPos;
        //屏幕座標屏幕座標xy軸轉化爲UI座標
        RectTransformUtility.ScreenPointToLocalPointInRectangle(cusUiParent, _tempV2, uiCamera, out _retPos);
        //賦值座標
        cusUiTarget.anchoredPosition = _retPos;
    }

    //跟攝像機的距離
    public float DistCameraByPos(Vector3 pos)
    {
        return Vector3.Distance(pos, sceneCamera.transform.position);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章