让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