当前位置:   article > 正文

Unity 角色血条_如何让血条一直对着摄像机

如何让血条一直对着摄像机

一、3D血条的实现思路

1、3D的话就得把血条固定在模型头上面;

2、每一帧都得根据模型的旋转来调整血条,使血条始终朝着摄像机,这样才不会导致血条旋转、缩放等问题;

3、界面同步显示血条;

二、3D血条的实现

1、创建CanvasCanvasRenderMode调整为World Space,并且将Canvas作为模型的子节点。

2、创建progress

3、朝向相机

  1. public class CHpCanvas : MonoBehaviour
  2. {
  3. private void Update()
  4. {
  5. transform.rotation = Camera.main.transform.rotation;
  6. }
  7. }

 三、界面血条

  内容待测试

  1. public class CHpBar : MonoBehaviour
  2. {
  3. private Slider hpSlider;
  4. private RectTransform rectTrans;
  5. public Transform target;
  6. public Vector3 offsetPos; //头顶偏移量
  7. private void Start()
  8. {
  9. hpSlider = GetComponent<Slider>();
  10. rectTrans = GetComponent<RectTransform>();
  11. //更新血量
  12. //hpSlider.value
  13. }
  14. private void Update()
  15. {
  16. if(target==null) return;
  17. //通过Collider来获取头顶坐标
  18. var col = target.GetComponent<Collider>();
  19. var topAhcor = new Vector3(col.bounds.center.x, col.bounds.max.y, col.bounds.center.z);
  20. //加上头顶偏移量
  21. Vector3 tarPos = topAhcor;
  22. var viewPos = Camera.main.WorldToViewportPoint(tarPos); //得到视窗坐标
  23. Vector2 screenPos;
  24. if (viewPos.z > 0f && viewPos.x > 0f && viewPos.x < 1f && viewPos.y > 0f && viewPos.y < 1f)
  25. {
  26. //获取屏幕坐标
  27. screenPos = Camera.main.WorldToScreenPoint(tarPos+offsetPos); //加上头顶偏移量
  28. }
  29. else
  30. {
  31. //不在可视窗口的模型,把名字移动到视线外
  32. screenPos = Vector3.up * 3000f;
  33. }
  34. //转化为屏幕坐标
  35. rectTrans.position = screenPos;
  36. }
  37. }

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

闽ICP备14008679号