Menu
CoddyTech

生命值条

Coddy Unity 塔防游戏 课程的第 22 课,共 25 课。

每个敌人上方都有一条血条,显示它剩余的生命值。在敌人的预制件中,血条由两个细长的立方体组成:深色背景和位于前方的绿色填充条。填充条的宽度等于剩余生命值除以满血值,结果介于 0 到 1 之间。将它乘以填充条的 x 轴缩放值,就能让填充条变短。不过,立方体会围绕自身中心缩放,所以填充条会从两端向中间缩短。填充条位于一个空的 pivot 对象下方,这个对象放在血条的左边缘。脚本缩放的是 pivot:它下面的所有内容都会朝左边缘缩短,血条便会从右侧开始减少。

这个比例必须用浮点数计算。health / data.maxHealth 会对两个 int 相除,而 C# 会丢弃整数除法的小数部分:6 / 9 的结果是 0,所以第一次受到攻击后,血条就会显示为空。先将其中一边转换为浮点数,(float)health / data.maxHealth,结果就是 0.67。水箱的水位从底部的 pivot 开始向上升:

float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);

满血条不会给玩家提供任何信息,所以血条一开始是隐藏的:预制件中的血条处于非激活状态,第一次受到攻击时才会显示。非激活对象不会执行 Update,但仍然可以调用它的方法。每个敌人都是预制件的独立副本,都有自己的血条。

challenge icon

挑战

困难

敌人受到攻击后,在每个敌人上方显示生命条。

  1. 在 HealthBar 中,添加 [SerializeField] private Transform fill; 和 public void Show(float fraction):启用生命条,并设置 fill.localScale = new Vector3(fraction, 1f, 1f);。
  2. 在 Enemy 中,添加 [SerializeField] private HealthBar healthBar;;在 TakeDamage 扣除生命值后,调用 healthBar.Show((float)health / data.maxHealth);。

按下“开始”:炮塔命中敌人时,生命条会显示并逐渐缩短。然后点击“检查”。

亲手试试

using UnityEngine;

// 后面会添加:敌人头顶显示剩余生命值的血条。
public class HealthBar : MonoBehaviour
{
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器