当前位置:   article > 正文

unity 模型标签一直朝向摄像机_unity ui始终朝向摄像机方向

unity ui始终朝向摄像机方向

模型标签一直朝向摄像机,无论相机拉远拉近标签大小不变。

  1. using UnityEngine;
  2. public class Billboard : MonoBehaviour
  3. {
  4. [SerializeField]
  5. private bool isScaleSize; // 是否根据距离来缩放大小
  6. [SerializeField]
  7. private float baseDistance = 10f; // 给定距离相机的参考距离。在该距离下的UI大小是我们想要的
  8. public Camera mainCamera; // 游戏主相机
  9. private Camera MainCamera
  10. {
  11. get
  12. {
  13. if (mainCamera == null)
  14. {
  15. mainCamera = Camera.main;
  16. }
  17. return mainCamera;
  18. }
  19. }
  20. private Vector2 baseScale; // 原本的缩放比例
  21. private void Start()
  22. {
  23. baseScale = transform.localScale;
  24. }
  25. void Update()
  26. {
  27. transform.forward = MainCamera.transform.forward;
  28. transform.rotation = MainCamera.transform.rotation;
  29. }
  30. private void LateUpdate()
  31. {
  32. // 令自身旋转值和相机的旋转值保持一致,使UI始终面向相机
  33. //transform.rotation = MainCamera.transform.rotation;
  34. if (isScaleSize)
  35. {
  36. var scale = CalcScale();
  37. if (scale.x <= 2)
  38. {
  39. scale = new Vector2(2, 2);
  40. }
  41. transform.localScale = new Vector3(scale.x, scale.y, 2);
  42. }
  43. }
  44. // 根据Canvas相对于相机的垂直距离和参考距离的比,来计算出新的缩放比例
  45. private Vector2 CalcScale()
  46. {
  47. // 计算出自身在相机坐标系内的局部坐标,此时局部坐标的Z值即为自身到相机的垂直距离
  48. var posInCamera = MainCamera.transform.InverseTransformPoint(transform.position);
  49. // 使用当前垂直距离比上参考距离,即可得出需要缩放的比例
  50. var rate = posInCamera.z / baseDistance;
  51. // 用原本的缩放比例乘以需要缩放的比例,得到最终缩放比例
  52. return baseScale * rate;
  53. }
  54. }

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

闽ICP备14008679号