Unity 角色血条

一、3D血条的实现思路

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

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

3、界面同步显示血条;

二、3D血条的实现

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

2、创建progress

3、朝向相机

public class CHpCanvas : MonoBehaviour
{
    private void Update()
    {
        transform.rotation = Camera.main.transform.rotation;
    }
}

 三、界面血条

  内容待测试

public class CHpBar : MonoBehaviour
{

    private Slider hpSlider;
    private RectTransform rectTrans;

    public Transform target;
    public Vector3 offsetPos; //头顶偏移量


    private void Start()
    {
        hpSlider = GetComponent<Slider>();
        rectTrans = GetComponent<RectTransform>();

        //更新血量
        //hpSlider.value
    }

    private void Update()
    {
        if(target==null) return;

        //通过Collider来获取头顶坐标
        var col = target.GetComponent<Collider>();
        var topAhcor = new Vector3(col.bounds.center.x, col.bounds.max.y, col.bounds.center.z);   
        //加上头顶偏移量
        Vector3 tarPos = topAhcor;

        var viewPos = Camera.main.WorldToViewportPoint(tarPos); //得到视窗坐标


        Vector2 screenPos;

        if (viewPos.z > 0f && viewPos.x > 0f && viewPos.x < 1f && viewPos.y > 0f && viewPos.y < 1f)
        {

            //获取屏幕坐标
            screenPos =  Camera.main.WorldToScreenPoint(tarPos+offsetPos); //加上头顶偏移量
        }
        else
        {
            //不在可视窗口的模型,把名字移动到视线外
            screenPos = Vector3.up * 3000f;
        }


        //转化为屏幕坐标
        rectTrans.position = screenPos;
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值