체력 바
Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 56개 중 10번째.
줄어드는 막대는 Image Type이 Filled로 설정된 UI Image입니다. Image에 Source Image가 지정되면 해당 설정이 나타나며, None이면 Inspector에서 숨겨집니다. Fill Method를 Horizontal로, Fill Origin을 Left로 설정하면 막대가 왼쪽 끝을 향해 줄어들고, 0부터 1까지의 fillAmount는 막대가 얼마나 채워져 그려지는지를 나타냅니다. 뒤에 어두운 Image를 두면 비어 있는 부분이 표시됩니다. Unity는 fillAmount 값을 제한하므로, 1.4는 막대 전체를 채워 그리고 -0.2는 막대를 비운 상태로 그립니다.
fillAmount는 남은 체력의 비율입니다. 즉, 체력을 최대 체력으로 나눈 값입니다. int 필드끼리 계산하면 정수 나눗셈이 되어 350 / 500은 0이므로, 먼저 한쪽을 float으로 변환하세요. Image는 UnityEngine.UI에 있습니다. 이 보스 체력 막대는 공격을 받을 때마다 업데이트됩니다.
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);는 막대가 가득 차 있을 때 초록색이고, 막대가 줄어들수록 빨간색으로 바뀝니다.
챌린지
쉬움기사에게는 체력보다 먼저 피해를 흡수하는 방패가 있습니다. 화살표 키로 기사를 이동하고(Mover.cs), 가시를 밟으면 30의 피해를 받습니다(Spikes.cs). Knight.cs를 작성하세요. 씬에서는 healthBar와 shieldBar를 연결하며, 씬에서 이 두 바는 비어 있습니다:
hp는maxHp(80)에서 시작하고shield는maxShield(40)에서 시작하며, 두 바 모두 가득 찬 상태로 시작합니다.TakeDamage(int amount): 방패는 남은 양만큼 피해를 흡수하고, 나머지는hp에서 차감되며,hp는 절대 0 미만이 되지 않습니다.- 피격될 때마다 두 바에 남은 양을 표시합니다.
shieldBar에는maxShield중 남은 방패 양을,healthBar에는maxHp중 남은 hp를 표시합니다.
Play를 누르고, 가시 위를 몇 번 걸어간 다음 Check를 누르세요.
직접 해보기
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)
{
// shield가 가능한 만큼 피해를 흡수하고, 나머지는 hp에서 차감하되 0 아래로 내려가지 않게 합니다. 그런 다음 두 막대를 모두 표시합니다.
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.