当前位置:   article > 正文

【Unity】【UGUI】映射3D坐标到UI上(血条、人物状态)_u3d 场景 ui 映射 位置

u3d 场景 ui 映射 位置

前言:

把3D坐标映射到UI上,这种操作多用于类似血条、人物名之类的东西:

这种其实是可以整个通用的方法来解决的:通过3D坐标直接修改UI控件的位置:

 

正文:

需求很明了简洁,所以直接上代码:

  1. /// <summary>
  2. /// 通过世界坐标设置UI的位置
  3. /// </summary>
  4. /// <param name="rectTransform"></param>
  5. /// <param name="worldPos"></param>
  6. public static void Do_SetUIPositionByWorldPos(this RectTransform rectTransform, Vector3 worldPos)
  7. {
  8. if (rectTransform == null)
  9. return;
  10. if (uiCamera == null)
  11. return;
  12. Vector3 screenPos = worldCamera.WorldToScreenPoint(worldPos);
  13. // Z小于0,代表在相机后面,此时X、Y反向;
  14. if (screenPos.z < 0)
  15. {
  16. screenPos.x *= -1;
  17. screenPos.y *= -1;
  18. }
  19. Vector3 uiWorldPos = uiCamera.ScreenToWorldPoint(screenPos);
  20. rectTransform.position = uiWorldPos;
  21. rectTransform.Do_SetLocalPosZ(0);
  22. }
  23. public static void Do_SetLocalPosZ(this Transform t, float z)
  24. {
  25. Vector3 localPos = t.localPosition;
  26. localPos.z = z;
  27. t.localPosition = localPos;
  28. }

上文中的 worldCamera 是指照3D物体的相机。

uiCamera是指照射UI的相机。

注意区分。

 

PS:

这个方法要放在一个静态类里,如果不明白这种写法可以去搜索C#类扩展。

PS2:

我感觉这个方法并不是性能最优,后面还以再研究怎么优化。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/91642
推荐阅读
相关标签
  

闽ICP备14008679号