隨便找個腳本掛着
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);
}
}