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

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

阅读 6.5k

冰封百度的学习笔记
程序生涯中的技术整理

Unity游戏程序员一枚。生命不息,学习不止。

193 声望
36 粉丝
0 条评论

Unity游戏程序员一枚。生命不息,学习不止。

193 声望
36 粉丝
文章目录
宣传栏