Menu
CoddyTech

체력 바

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 25개 중 22번째.

각 적 위의 막대는 남은 체력을 보여 줍니다. 적 프리팹에는 얇은 큐브 두 개로 된 막대가 있습니다. 어두운 배경 큐브와 그 앞의 초록색 채움 큐브입니다. 채움 큐브의 너비는 남은 체력을 최대 체력으로 나눈 값, 즉 0에서 1 사이의 숫자이며, 여기에 맞춰 x축 크기를 조정하면 큐브가 짧아집니다. 하지만 큐브는 중심을 기준으로 크기가 조정되므로, 채움 큐브는 양쪽 끝에서 가운데를 향해 줄어듭니다. 채움 큐브는 막대의 왼쪽 끝에 있는 빈 피벗 오브젝트 아래에 있고, 대신 스크립트가 피벗의 크기를 조정합니다. 그러면 피벗 아래의 모든 것이 그 끝을 향해 줄어들어 막대가 오른쪽부터 비워집니다.

분수는 부동 소수점 수로 계산해야 합니다. health / data.maxHealth는 정수 두 개를 나누며, C#은 정수 나눗셈의 소수 부분을 버립니다. 6 / 9는 0이므로, 첫 번째 타격 이후 막대가 비어 있는 것으로 표시됩니다. 한쪽을 먼저 형변환하면 (float)health / data.maxHealth와 같이 0.67이 됩니다. 바닥의 피벗에서 위쪽으로 수위가 올라가는 물탱크의 경우:

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 플레이그라운드