Menu
CoddyTech

血条

本课属于 Coddy Unity 学习旅程的“打造真正的游戏”单元。第 10 课,共 60 课。

会逐渐变空的条形显示是一个 UI Image,它的 Image Type 设置为 Filled。Image 设置了 Source Image 后才会出现这个选项;如果为 None,Inspector 就会将其隐藏。将 Fill Method 设为 Horizontal,并将 Fill Origin 设为 Left,条形就会朝左端缩短。fillAmount 的取值范围是 0 到 1,表示绘制条形的比例。在它后面放一个深色 Image,就能显示空的部分。Unity 会限制 fillAmount 的取值,因此 1.4 会绘制完整的条形,-0.2 则会绘制空条形。

fillAmount 表示剩余生命值占最大生命值的比例。使用 int 字段时,除法会进行整数除法,因此 350 / 500 的结果是 0,所以要先将一边转换为 float。Image 位于 UnityEngine.UI 中。这个 Boss 血条会在每次受到攻击后更新:

public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;

public void Hit(int damage)
{
    bossHp = Mathf.Max(bossHp - damage, 0);
    bossBar.fillAmount = (float)bossHp / bossMaxHp;   // 350 / 500 = 0.7
}

血条的颜色也可以随生命值变化:bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); 血条满时为绿色,随着血条变空会逐渐变红。

challenge icon

挑战

简单

用两个条形显示骑士的护盾和生命值。

  1. 编写 ShowBars():shieldBar.fillAmount = (float)shield / maxShield;,并对 healthBar 使用 hp 和 maxHp 做同样的处理。在 Start() 中调用它。
  2. 在 TakeDamage 中,护盾承受 Mathf.Min(amount, shield) 的伤害,剩余伤害从 hp 中扣除,且 hp 不会低于 0。然后调用 ShowBars()。

按“运行”,然后走到尖刺上:护盾条会先清空。然后点击“检查”。

亲手试试

using UnityEngine;
using UnityEngine.UI;

public class Knight : MonoBehaviour
{
    public Image healthBar;
    public Image shieldBar;
    public int maxHp = 80;
    public int maxShield = 40;
    private int hp;
    private int shield;

    void Start()
    {
        hp = maxHp;
        shield = maxShield;
        // 填满两个进度条
    }

    public void TakeDamage(int amount)
    {
        // 护盾尽可能承受伤害;剩余伤害从 hp 中扣除,最低降到 0。然后显示两个进度条。
    }
}

打造真正的游戏中的所有课

自己练习: Unity 在线编辑器