Menu
CoddyTech

Thanh máu

Bài học 22 trên 25 trong khóa học Game Unity: thủ thành của Coddy.

Một thanh trên mỗi kẻ địch cho biết lượng máu còn lại. Trong prefab của kẻ địch, thanh này gồm hai khối lập phương mỏng: một nền tối và một phần tô màu xanh lá ở phía trước. Chiều rộng của phần tô màu bằng lượng máu còn lại chia cho tổng lượng máu, tạo ra một số từ 0 đến 1; thu nhỏ trục x của phần tô màu theo số đó sẽ khiến nó ngắn lại. Tuy nhiên, khối lập phương co lại quanh tâm, nên phần tô màu sẽ thu nhỏ về giữa từ cả hai đầu. Phần tô màu nằm bên dưới một đối tượng pivot trống ở mép trái của thanh, và tập lệnh thay vào đó thu nhỏ pivot: mọi thứ bên dưới nó co lại về phía mép đó, khiến thanh vơi dần từ bên phải.

Phải tính phân số bằng số thực. health / data.maxHealth chia hai số nguyên, và C# loại bỏ phần phân số khi chia số nguyên: 6 / 9 bằng 0, nên thanh sẽ báo hết sau đòn đánh đầu tiên. Ép kiểu một vế trước, (float)health / data.maxHealth, sẽ cho kết quả 0.67. Một bể nước có mực nước dâng lên từ pivot ở đáy:

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

Một thanh đầy không cho người chơi biết gì, nên ban đầu thanh sẽ bị ẩn: prefab để thanh ở trạng thái không hoạt động, và đòn đánh đầu tiên sẽ bật nó lên. Đối tượng không hoạt động sẽ không chạy Update, nhưng bạn vẫn có thể gọi các phương thức của nó. Mỗi kẻ địch là một bản sao riêng của prefab, với thanh riêng.

challenge icon

Thử thách

Khó

Hiển thị thanh máu phía trên mỗi kẻ địch sau khi chúng bị bắn trúng.

  1. Trong HealthBar, thêm [SerializeField] private Transform fill; và public void Show(float fraction): bật thanh máu và đặt fill.localScale = new Vector3(fraction, 1f, 1f);.
  2. Trong Enemy, thêm [SerializeField] private HealthBar healthBar;; sau khi TakeDamage trừ máu, gọi healthBar.Show((float)health / data.maxHealth);.

Nhấn Chơi: các thanh máu xuất hiện và thu nhỏ khi tháp bắn trúng kẻ địch. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;

// Sẽ làm sau: thanh phía trên kẻ địch hiển thị lượng máu còn lại.
public class HealthBar : MonoBehaviour
{
}

Tất cả bài học trong Game Unity: thủ thành

Tự luyện tập: Playground Unity