Unity
[Unity] Chap05. 버튼과 UI 만들기
mooni_
2024. 3. 7. 21:58
5-1. 게임 UI 만들기
UI(user interface) 만들기
Unity에서는 가상 필터(Canvas)를 얹어서 그 위에 플레이어가 조작할 대상을 배치함
Canvas 표시 설정
→ Render Mode : Screen Space - Camera (Render Camera, Order in Layer 등이 활성화 됨)
→ Render Camera : Main Camera (계층 뷰에서 Main Camera Object를 끌고 오면 플레이 화면 크기로 조정됨)
→ Order in Layer : 10 (가장 앞에 배치하기 위해서 임의로 10으로 설정)
Canvas Render Mode
1) Screen Space - Overlay : 기본값, 항상 맨 앞에 배치하기 때문에 Order in Layer 등의 조작 불가
2) Screen Space - Camera : 지정 카메라를 따라 크기 조정, Order in Layer나 Place Distance 등의 조작 가능
3) World Space : 3D 공간의 한 점에 고정되어 배치, 가장 자유도가 높음, 그러나 가장 어려움
RESTART, NEXT가 담긴 패널을 담은 Canvas,,,
Canvas에 적용할 GameManager script 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UI 사용 시 필요
public class GameManager : MonoBehaviour
{
public GameObject mainImage; //각 UI에 대한 이미지를 담아둘 변수
public Sprite gameOverSpr;
public Sprite gameClearSpr;
public GameObject panel;
public GameObject restartButton;
public GameObject nextButton;
Image titleImage; //이미지 표시 컴포넌트
// Start is called before the first frame update
void Start()
{
Invoke("InactiveImage", 1.0f); //이미지 숨기기
panel.SetActive(false); //패널 숨기기
}
// Update is called once per frame
void Update()
{
if(PlayerController.gameState == "gameclear") //게임클리어 상태 시
{
mainImage.SetActive(true); //이미지 표시
panel.SetActive(true); //패널 표시
Button bt = restartButton.GetComponent<Button>();
bt.interactable = false; //RESTART 버튼 무효화
mainImage.GetComponent<Image>().sprite = gameClearSpr;
PlayerController.gameState = "gameend"; //gameend 상태로 변경
}
else if(PlayerController.gameState == "gameover") //게임오버 상태 시
{
mainImage.SetActive(true); //이미지 표시
panel.SetActive(true); //패널 표시
Button bt = nextButton.GetComponent<Button>();
bt.interactable = false; //NEXT 버튼 무효화
mainImage.GetComponent<Image>().sprite = gameOverSpr;
PlayerController.gameState = "gameend"; //gameend 상태로 변경
}
else if(PlayerController.gameState == "playing")
{
//게임 중 상태
}
}
void InactiveImage() //이미지 숨기기
{
mainImage.SetActive(false);
}
}
변수
public으로 변수를 선언하여 유니티 에디터에서 게임 오브젝트나 이미지를 설정할 수 있음
Start Method
이미지와 패널(RESTART, NEXT 버튼)을 숨기고 시작
Invoke("InactiveImage", 1.0f) : Invoke("method", time), 지정 시간 후에 앞의 method 호출
InactiveImage Method
setActive method 호출하여 이미지를 지움(T/F)
→ 결론적으로 1초 후에 해당 이미지를 지움
* Invoke에서 호출하는 매서드는 반환값이 void이고 인수는 없어야함
Update Method
Game State에 따라서 이미지와 패널의 표시를 다룸
5-2. 게임 재시작 기능 만들기
RESTART 버튼의 기능인 재시작을 위해 씬 변경 Script 만들기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement; //씬 변경 시 필요
public class ChangeScene : MonoBehaviour
{
public string sceneName; //불러올 씬
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
public void Load()
{
SceneManager.LoadScene(sceneName); //씬 불러오기
}
}
1) 씬 변경에 필요한 Engine 추가
2) 불러올 씬을 담을 public 변수 선언
3) Load() : SceneManager.LoadScene()를 사용하여 씬 불러오기
위의 기능을 버튼이 눌렸을 때 실행하기 위해서 RESTART, NEXT 버튼에 script 추가
On Click() 설정 패널에서 ChangeScene 스크립트 내의 Load 함수 적용 후 씬 배정
이후 해당 Canvas를 프리팹으로 만들었음
5-3. 게임 실행하기
했습니다.
*교재 : 누구나 할 수 있는 유니티 2D 게임 제작