27.敌人血条

27.敌人-敌人血条


27.1 知识点

明确血条需求



血条的需求包括:

  1. 将世界坐标转换为屏幕坐标。
  2. 将屏幕坐标转换为GUI坐标。
  3. 绘制血条底和血条。
  4. 添加受伤时间逻辑,在受伤时显示血条一定时间后隐藏。

在移动的敌人脚本中添加GUI绘制方法,绘制血条底和血条。添加受伤时间逻辑,当受伤的时候显示血条显示过一定逻辑后隐藏不绘制

using UnityEngine;

// 移动的敌人
public class MonsterObj : TankBaseObj
{
    // 两张血条的图
    public Texture maxHpBK;
    public Texture hpBK;

    // 显示血条计时用时间
    private float showTime = 0;

    // 血条位置和大小
    private Rect maxHpRect;
    private Rect hpRect;

    // 在这里进行血条UI的绘制
    private void OnGUI()
    {
        if(showTime > 0)
        {
            //不停计时
            showTime -= Time.deltaTime;

            //画图 画血条
            //1.把怪物当前位置 转换成 屏幕位置
            //摄像机里面提供了API 可以将 世界坐标 转为 屏幕坐标
            Vector3 screenPos = Camera.main.WorldToScreenPoint(this.transform.position);

            //2.屏幕位置 转换成 GUI位置
            //知识点:如何得到当前屏幕的分辨率高
            screenPos.y = Screen.height - screenPos.y;

            //然后再绘制
            //知识点:GUI中的 图片绘制
            //底图
            maxHpRect.x = screenPos.x - 50;
            maxHpRect.y = screenPos.y - 50;
            maxHpRect.width = 100;
            maxHpRect.height = 15;

            //画底图
            GUI.DrawTexture(maxHpRect, maxHpBK);

            hpRect.x = screenPos.x - 50;
            hpRect.y = screenPos.y - 50;

            //根据血量和最大血量的百分比 决定画多宽
            hpRect.width = (float)hp / maxHp * 100f;
            hpRect.height = 15;

            //画血条
            GUI.DrawTexture(hpRect, hpBK);
        }
    }

    // 受伤时显示血条
    public override void Wound(TankBaseObj other)
    {
        base.Wound(other);
        // 设置显示血条的时间
        showTime = 3;
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏