체력 바
Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 16번째.
각 적 위의 막대는 남은 체력을 보여 줍니다. 적 프리팹에는 얇은 큐브 두 개로 된 막대가 있습니다. 어두운 배경 큐브와 그 앞의 초록색 채움 큐브입니다. 채움 큐브의 너비는 남은 체력을 최대 체력으로 나눈 값, 즉 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를 실행하지 않지만, 그 메서드는 여전히 호출할 수 있습니다. 각 적은 프리팹의 독립된 복사본이며, 각자 고유한 막대를 가지고 있습니다.
챌린지
어려움HealthBar에서 직렬화된 Transformfill(Inspector에서 바의 FillPivot을 할당)을 추가하고, 바의 GameObject를 활성화하고fill을 x축을 따라fraction만큼 스케일링하는public void Show(float fraction)을 추가하세요.Enemy에 직렬화된 필드healthBar(HealthBar)를 추가하세요. TakeDamage가 체력을 감소시킬 때마다 남은 체력을maxHealth의 비율로 표시하세요.
각 적 프리팹에는 막대가 있습니다. 막대는 비활성 상태이고 HealthBar 스크립트가 붙어 있으며, 왼쪽 가장자리에 있는 피벗 아래에 채우기 요소가 있습니다. Play를 누르고 타워가 발사할 때 막대를 살펴본 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
// 나중에 구현: 적 위에 표시되어 남은 체력을 보여주는 막대.
public class HealthBar : MonoBehaviour
{
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.