Unity小功能——怪物血条

怪物血条的实现

一、怪物血条的原理

怪物血条

首先是将怪物身上的UI组件画布(Canvas)设置为世界空间,这样就可以将UI像物品一样摆在世界中,

然后使用两种颜色的图片,一种作为满血的UI,一种作为空血的UI。

比如我使用了蓝色图片为背景,红色图片是蓝色图片的子物体。再将红色图片的锚点和轴心设置为左侧,宽度设置为0。

当怪物受伤时,通过脚本改变红色图片RectTransform中的宽度,实现血条的变化。

在这里插入图片描述

using UnityEngine;

public class HurtUI : MonoBehaviour
{
    public GameObject bloodRed;//红色血条
    public GameObject diedObject;//挂载的物体用于执行死亡动画和销毁
    private int currentBlood;//当前血量(未使用)
    private int maxBlood = 100;//最大值100滴血
    private int sumHurtBlood;//总受伤血量
    private Vector2 bloodRedRectTransform;//红色血条的RectTransform中的Width和Height用二维向量表示


    private void Start() 
    {
        bloodRedRectTransform = bloodRed.GetComponent<RectTransform>().sizeDelta;
        //得到红色血条的RectTransform中的Width和Height用二维向量
        currentBlood = maxBlood;//当前血量为最大血量
    }
    public void Hurted(int _HurtNum)//伤害范围1-100
    {
        //在UI中,0.1对应10滴血
            sumHurtBlood += _HurtNum;//其他脚本调用函数传入伤害值,计算当前的总伤害
            if(maxBlood - sumHurtBlood <= 0)//控制血条最低为0
            {
                Debug.Log("GG");
                currentBlood = 0;
                bloodRed.GetComponent<RectTransform>().sizeDelta = new Vector2(1f,bloodRedRectTransform.y);
                //0.1对应10滴血,所以宽度为1时,血条为空
                diedObject.GetComponent<Animator>().Play("Die",0);
                //播放死亡动画
                Destroy(diedObject,0.9f);
                //销毁挂载的物体
            }
            else
            {
                currentBlood -= _HurtNum;//当前血量为减去传入的伤害值
                float tmp_HurtBlood = sumHurtBlood/100f;//0.1对应10滴血,当前总受伤害值/100即为宽度
                bloodRed.GetComponent<RectTransform>().sizeDelta = new Vector2(tmp_HurtBlood,bloodRedRectTransform.y);
                //设置宽度
                diedObject.GetComponent<Animator>().Play("Take Damage",0);
                //播放受击动画
            }
    }
}

当前血量可以用来控制怪物的状态,比如第二阶段,释放技能之类。

二、怪物血条的旋转

怪物血条跟随相机
怪物血条跟随相机

实现该功能可以在上述代码中获得画布Canvas对象,然后在Update中使用LookAt方法对准主摄像机。这样主相机在运动时,物体挂载的画布UI也会随之旋转。

public GameObject blood;//画布Canvas
private void Update()
{
    //面向摄像机
    blood.GetComponent<Transform>().LookAt(Camera.main.transform.position);   
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睡不着乌托托

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值