讓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懸浮在人物頭頂
優化
當攝像機旋轉角度時 從新定位
ui