1 분 소요

UI 만들기

  • 게임의 필수 중에 하나인 UI를 만들어보겠습니다.

  • 점수, 스테이지, HP, 남은시간을 표시해보겠습니다.

점수

  • Hierarchy 뷰에 UI - Text - TextMeshPro 를 추가합니다. 그러면 Canvas 안에 Text가 생긴것을 확인할 수 있습니다.

  • 저는 Score, Score_title 라는 이름으로 두가지를 만들어주었습니다.

  • Text에 표시할 내용을 작성하고, 스타일도 마음대로 설정합니다.

image

HP

  • HP는 이미지로 표시했습니다.

  • UI - Image 를 추가하여 이미지 소스를 마리오로 해줍니다.

image

스테이지

  • UI - TextMeshPro 를 추가해서 점수도 표현해보겠습니다.

image

남은시간

  • 마찬가지로 TextMeshPro를 추가해서 남은 시간을 표현해보겠습니다.

image

GameManager.cs

  • UI는 GamaManager에서 관리합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class GameManager : MonoBehaviour
{
    public int totalPoint;      //총점수
    public int stageNumber;     //스테이지 번호
    public int Hp;
    public PlayerControl playerControl;
    public GameObject[] Stages;
    
    private float time;         //남은시간

    // UI
    public Image[] UIhp;
    public TextMeshProUGUI UIscore;
    public TextMeshProUGUI UItime;
    public TextMeshProUGUI UIstage;

    BoxCollider2D Manager_collider;


    private void Awake()
    {
        Manager_collider = GetComponent<BoxCollider2D>();
        time = 400f;
    }

    void Update()
    {
        UIscore.text = (totalPoint).ToString();

        if (time > 0)
            time -= Time.deltaTime;
        else
            //클리어실패

        //잔여시간 표시
        UItime.text = Mathf.Ceil(time).ToString();

    }
    //다음 스테이지
    public void NextStage()
    {
        // 1스테이지 클리어
        if (stageNumber < Stages.Length)
        {
            // 스테이지가 넘어가면 현재 스테이지는 비활성화
            Stages[stageNumber].SetActive(false);
            stageNumber++;
            // 다음 스테이지 활성화
            Stages[stageNumber].SetActive(true);
            PlayerRepos();

            //Stage 표시 UI
            UIstage.text = "Stage " + (stageNumber + 1);
        }
        // 2스테이지 클리어(게임클리어)
        else
        {
            // 게임 멈추기
            Time.timeScale = 0;

        }
    }

    //충돌 이벤트(절벽에서 떨어졌을 때)
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            playerControl.Die();
        }
    }

    public void HpDown()
    {
        if (Hp > 0)
        {
            Hp--;
            //Hp UI 효과
            UIhp[Hp].color = new Color(1, 0, 0, 0.2f);
        }
        else
        {
            UIhp[0].color = new Color(1, 0, 0, 0.2f);

            playerControl.Die();
        }
    }

    // 플레이어 위치 재설정
    void PlayerRepos()
    {
        // 시작 지점으로 재설정
        playerControl.transform.position = new Vector3(-5, 0, 0);
        playerControl.VelocityZero();
    }

}

image

댓글남기기