[Unity] 슈퍼마리오 게임 만들기[11]
UI 만들기
-
게임의 필수 중에 하나인 UI를 만들어보겠습니다.
-
점수, 스테이지, HP, 남은시간을 표시해보겠습니다.
점수
-
Hierarchy 뷰에 UI - Text - TextMeshPro 를 추가합니다. 그러면 Canvas 안에 Text가 생긴것을 확인할 수 있습니다.
-
저는 Score, Score_title 라는 이름으로 두가지를 만들어주었습니다.
-
Text에 표시할 내용을 작성하고, 스타일도 마음대로 설정합니다.
HP
-
HP는 이미지로 표시했습니다.
-
UI - Image 를 추가하여 이미지 소스를 마리오로 해줍니다.
스테이지
- UI - TextMeshPro 를 추가해서 점수도 표현해보겠습니다.
남은시간
- 마찬가지로 TextMeshPro를 추가해서 남은 시간을 표현해보겠습니다.
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();
}
}
댓글남기기