Unity C# 3D世界坐标转2D屏幕坐标

让2D UI跟随3D物体移动或指示3D物体的位置该怎么做呢?

关键代码:

Camera.main.WorldToScreenPoint(target.position) + new Vector3(-Screen.width / 2, -Screen.height / 2);

测试脚本:
Position3DTo2DTest.cs

using UnityEngine;

/// 
/// 3D物体转2D屏幕坐标测试
/// ZhangYu 2019-03-20
/// 
public class Position3DTo2DTest : MonoBehaviour {

    public Transform target;    // 3D目标
    public Transform ui;        // 2D UI
    private Vector3 originOff;  // 当前UI系统(0,0)点 相对于屏幕左下角(0, 0)点的偏移量

    private void Start () {
        originOff = new Vector3(-Screen.width / 2, -Screen.height / 2);
        Reposition();
    }

    private void Update () {
        // 需要性能优化 仅在物体移动或相机移动后调用即可
        Reposition();
    }

    // 根据目标物体 重定位UI
    private void Reposition() {
        Vector3 position = Camera.main.WorldToScreenPoint(target.position) + originOff;
        position.z = 0;
        ui.localPosition = position;
    }

}

实现效果:
血条UI悬浮在人物头顶

当摄像机旋转角度时 重新定位

你可能感兴趣的:(unity,c#)