게임 개발을 완료 후 빌드해서 폰에서 테스트 중... 현재 HP, MP값을 구현 안한 걸 확인했다.
역시 게임 개발 후 실전 테스트를 해봐야 부족한 부분을 찾을 수 있는 것 같다;;;
1.현재 HP, MP값 UI
게임 플레이 시 플레이어의 현재 HP, MP값을 HpBarUI와 MpBarUI에 출력하는 기능이다.
2.현재 체력, 마나값 출력 방법 기획의도
최초 HpBarUI, MpBarUI를 기획했을 때는 "현재값 / 최대값" 형태로 출력하려고 했으나 이 게임에서는 플레이어의 체력, 마나가 성장하지 않기 때문에 최대값의 정보가 무의미한 것 같아서 제거했다.
현재값이 얼마인가?가 제일 중요한 정보인 것 같다. (현재 체력이 얼마여서 죽는가 사는가? 체력을 회복해야 하는가? 도망쳐야 하는가? 현재 마나가 충분하여 스킬을 사용할 수 있는가? 아닌가? 등) 따라서 HpBarUI, MpBarUI에 해당 값의 현재값만 출력하기로 결정했다.
3.규칙
3.1.초기 HP, MP값 출력
- 게임 시작 시 플레이어의 현재 체력 값을 HpBarUI의 Text에 출력한다.
- 게임 시작 시 플레이어의 현재 마나 값을 MpBarUI의 Text에 출력한다.
3.2.현재 HP값 갱신
- 게임 진행 중 HP값이 갱신될 때 HpBarUI의 Text에 현재 HP값을 출력한다.
3.3.현재 MP값 갱신
- 게임 진행 중 MP값이 갱신될 때 MpBarUI의 Text에 현재 MP값을 출력한다.
4.구현 과정
1.Text 설정하기
HpBarUI의 Slider에 Text 오브젝트 생성 > Text 가운데 정렬, Bold 처리하기
MpBarUI도 HpBarUI와 동일하게 구현하면 된다.

2.UI Manager에 현재 HP, MP값 출력하는 기능 추가하기
public Text healthText; //현재 HP값을 출력할 Text
public Text manaText; //현재 MP값을 출력할 Text
//현재 HP값 갱신
public void UpdateHealthText(float newHealth)
{
//float을 int로 변환
int health = (int)newHealth;
//int를 string으로 변환
string stringHealth = health.ToString();
healthText.text = stringHealth;
}
//현재 MP값 갱신
public void UpdateManaText(float newMana)
{
//float을 int로 변환
int mana = (int)newMana;
//int를 string으로 변환
string stringMana = mana.ToString();
manaText.text = stringMana;
}
3.PlayerStats 스크립트의 HP, MP값 갱신할 때 현재 HP, MP Text UI 갱신 기능 추가하기
//게임 시작 시 플레이어 체력, 마나 설정
protected override void OnEnable()
{
//LivingEntity의 OnEnable() 실행(상태초기화)
base.OnEnable();
//체력 슬라이더 활성화
playerHpbar.gameObject.SetActive(true);
//체력 슬라이더의 최댓값을 기본 체력값으로 변경
playerHpbar.maxValue = startingHealth;
//체력 슬라이더의 값을 현재 체력값으로 변경
playerHpbar.value = health;
//현재 체력 text UI 갱신
UIManager.instance.UpdateHealthText(health);
//마나 슬라이더 활성화
playerMpbar.gameObject.SetActive(true);
//마나 슬라이더의 최댓값을 최대마나값으로 변경
playerMpbar.maxValue = maxMana;
//마나 슬라이더의 값을 현재 마나값으로 변경
playerMpbar.value = mana;
//현재 마나 text UI 갱신
UIManager.instance.UpdateManaText(mana);
}
//체력 회복
public void RestoreHealth(float newHealth)
{
if(dead)
{
//이미 사망한 경우 체력을 회복할 수 없음
return;
}
playerAudioPlayer.PlayOneShot(getPotion);
//체력 회복
health += newHealth;
if (health >= startingHealth)
{
health = startingHealth;
}
playerHpbar.value = health;
//현재 체력 text UI 갱신
UIManager.instance.UpdateHealthText(health);
}
//마나 회복
public void RestoreMana(float newMana)
{
if (dead)
{
//이미 사망한 경우 마나를 회복할 수 없음
return;
}
playerAudioPlayer.PlayOneShot(getPotion);
//마나 회복
mana += newMana;
if (mana >= maxMana)
{
mana = maxMana;
}
//회복된 마나량을 Mpbar슬라이더에 업데이트
playerMpbar.value = mana;
//현재 마나 text UI 갱신
UIManager.instance.UpdateManaText(mana);
}
//데미지 처리
public override void OnDamage(float damage)
{
playerAudioPlayer.PlayOneShot(hitClip);
base.OnDamage(damage);
playerHpbar.value = health;
//현재 체력 text UI 갱신
UIManager.instance.UpdateHealthText(health);
}
public void ManaRegen()
{
if (mana != maxMana)
{
//마나는 초당 0.5씩 회복
mana += Time.deltaTime * manaRegen;
//마나를 회복했는데 최대 마나보다 크다면 현재마나를 최대마나량으로 변경
if(mana > maxMana)
{
mana = maxMana;
}
//회복된 마나량을 Mpbar슬라이더에 업데이트
playerMpbar.value = mana;
//현재 마나 text UI 갱신
UIManager.instance.UpdateManaText(mana);
}
}
//스킬 사용 시 마나 소비
public virtual void UseMana(float manaCost)
{
//소비 마나만큼 현재 마나 감소
mana -= manaCost;
//소비한 마나량을 Mpbar슬라이더에 업데이트
playerMpbar.value = mana;
//현재 마나 text UI 갱신
UIManager.instance.UpdateManaText(mana);
}
}
4.HUD Canvas의 UIManager 컴포넌트에 현재 체력값을 출력할 HpBarUI의 Text, 현재 마나값을 출력할 MpBarUI의 Text를 할당하기

5.현재 HP, MP값 UI 기능 완성

'게임 개발 > 유니티 게임 개발 일지' 카테고리의 다른 글
| #22 빌드하기, 구글 플레이에 게임 출시하기 (3) | 2020.08.23 |
|---|---|
| #20 BGM, 효과음 적용하기 (0) | 2020.08.20 |
| #19 게임 Title 화면 구현, 오클루전 컬링 적용 (0) | 2020.08.18 |
| #18 스킬 사용 가능UI, 추락사, 터치 시 콜라이더 무시, 전투 밸런스, 네비 메쉬 문제해결 (0) | 2020.08.12 |
| #17 PlayerSpawner, ItemSpawner, ObstacleSpawner 구현 (0) | 2020.08.11 |
댓글