UI 작업 레벨, HP, 타이머, 킬수

김보근·2024년 9월 13일

Unity

목록 보기
85/113
post-thumbnail

TIL: UI 작업 레벨, HP, 타이머, 킬수

오늘 게임의 HUD 작업을 했는데, 타이머, 레벨, HP, 경험치(Exp), 그리고 킬 수를 각각 UI에 표시할 수 있게 만들었다. LateUpdate를 사용해서 게임 상태에 따라 각 UI 요소들이 실시간으로 갱신되도록 설정했고, TextMeshProUGUI와 Slider를 활용해서 텍스트와 슬라이더의 값을 적절히 표현할 수 있도록 했다.

경험치(Exp)는 현재 경험치와 다음 레벨에 필요한 경험치를 비교해서 슬라이더로 보여줬다.
레벨은 단순히 "Lv.00" 형식으로 텍스트에 표시했다.
킬 수는 "00" 형식으로 보여줬고, 타이머는 남은 시간을 분과 초로 계산해 "00:00" 형식으로 텍스트로 출력했다.
HP는 현재 체력과 최대 체력을 비교해 슬라이더로 표시하는 방식으로 만들었다.
UI 작업을 마치고 나니 게임 플레이 중 정보 전달이 훨씬 명확해진 것 같다.

스크립트

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class HUD : MonoBehaviour
{
    public enum InfoType { Exp, Level, Kill, Time, Health}
    public InfoType type;


    TextMeshProUGUI myText;
    Slider mySlider;

    private void Awake()
    {
        mySlider = GetComponent<Slider>();
        myText = GetComponent<TextMeshProUGUI>();
    }

    private void LateUpdate()
    {
        switch (type)
        {
            case InfoType.Exp:
                float curExp = GameManager.Instance.exp;
                float maxExp = GameManager.Instance.nextExp[GameManager.Instance.level];
                mySlider.value = curExp / maxExp;

                break;
            case InfoType.Level:
                myText.text = string.Format("Lv.{0:F0}", GameManager.Instance.level);
                break;
            case InfoType.Kill:
                myText.text = string.Format("{0:F0}", GameManager.Instance.kill);
                break;
            case InfoType.Time:
                float remainTime = GameManager.Instance.maxGameTime - GameManager.Instance.gameTime;
                int min = Mathf.FloorToInt(remainTime / 60);
                int sec = Mathf.FloorToInt(remainTime % 60);
                myText.text = string.Format("{0:D2}:{1:D2}", min, sec);
                break;
            case InfoType.Health:
                float curHealth = GameManager.Instance.health;
                float maxHealth = GameManager.Instance.maxHealth;
                mySlider.value = curHealth / maxHealth;
                break;

        }
    }
}

영상

profile
게임개발자꿈나무

0개의 댓글