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;

/// <summary>
/// 3D物体转2D屏幕坐标测试
/// ZhangYu 2019-03-20
/// </summary>
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悬浮在人物头顶
效果图1优化

当摄像机旋转角度时 从新定位
效果图2ui

相关文章
相关标签/搜索