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

相關文章
相關標籤/搜索