★ 학습 목표 ★
1. 제한 시간이 감소하는 기능 만들기
2. 제한 시간 종료 시 다시 시작하는 기능 만들기
1. 게임 오버 UI 만들기
: Hierarchy → MainScene 오른쪽 버튼 클릭 → GameObject → UI → Canvas 생성 (파일명 : Panel)
1) Image UI 와 Text UI 만들기
: Panel 오른쪽 버튼 클릭 → UI → Image 생성 (UI 색상 추가를 위해 만듬)
: Panel 오른쪽 버튼 클릭 → UI → Text 생성 (UI 텍스트 추가를 위해 만듬)
2) Panel 을 Inactive 상태로 변경하기
: Panel을 Inactive 상태로 변경하는 이유는 게임 오버 되었을 때에만 해당 UI 를 출력할 것이기 때문이다.
: Panel Inspector 에서 체크 표시를 해제하면 Inactive 상태가 된다.
2. 제한 시간 흐르게 만들기
: 제한 시간(초) 를 관리하기 위해 GameManager Script 에서 timeText 라는 변수를 선언 하고,
gameManager Inspector 에 Time Text UI 를 드래그하여 추가한다.
[GameManager C# Script]
public Text timeText; float limit = 60; void Update( ) { limit -= Time.deltaTime; timeText.text = limit.ToString("N2"); } [설명] public Text timeText; : timeText 를 GameManager 에서 관리하겠다는 선언을 의미한다. float limit = 60; : limit 를 60초로 설정한다. limit -= Time.deltaTime; : limit 변수에 저장된 시간을 차감시킨다는 의미이다. timeText.text = limit.ToString("N2"); : 숫자(float) 로 되어 있는 limit 변수를 게임상에 출력해주기 위해 ToString 문자형으로 형변환을 시켜준다. : ToString 에 "N2" 를 넣을 경우, 소수점 둘째 자리까지만 출력한다는 의미이다. |
3. 시간 멈추게 하기
: 제한 시간 60초가 모두 흘렀을 경우, 시간을 마이너스(-) 로 계속 흐르지 않고 0으로 고정되도록 코드를 진행한다.
[GameManager C# Script]
void Update( ) { if (limit < 0) { Time.timeScale = 0.0f; limit = 0.0f; } } [설명] if (limit < 0) : limit 의 값이 0보다 작을 경우 Time.timeScale = 0.0f; : timeScale 값을 0으로 설정한다. limit = 0.0f; : limit 값을 0으로 설정한다. ※ timeScale 이란? : timeScale 은 시간을 빠르게 흐르게 할지, 느리게 흐르게 할지, 멈추게 할지를 결정하는 함수이다. (timeScale 값은 0이면 시간이 멈추게 되고 값이 높을 수록 시간이 빠르게 흘러 간다. 기본값은 1이다.) |
4. 게임 오버 시 UI 창 띄우기
: limit (제한 시간) 이 0초로 되었을 때, Panel UI 를 출력시킨다.
: GameManager Script 에서 panel 변수를 선언하고, gameManager Inspector 에서 Panel 에 Panel Canvas 를 드래그해서 넣는다.
[GameManager C# Script]
public GameObject panel; void Update( ) { if (limit < 0) { panel.SetActive(true); } } [설명] public GameObject panel; : panel 을 GameManager 에서 관리하겠다는 선언을 의미한다. panel.SetActive(true); : Panel Inspector 의 상태를 Inactive 에서 Active 로 변경한다. |
5. 게임 다시 실행하는 기능 만들기
1) 게임 오버 UI 에 버튼 기능 추가하기
: Canvas UI Panel → Add Component → Button 생성
2) 게임 다시 시작 함수 코드 작성하기
: 게임을 다시 실행하기 위해서는 MainScene 을 다시 불러와서 처음부터 실행시킬 수 있다.
[GameManager C# Script]
public void retry( ) { SceneManager.LoadScene("MainScene"); } [설명] SceneManager.LoadScene("MainScene"); : MainScene 을 다시 불러와서 처음부터 시작한다는 의미이다. (새로고침) |
※ GameManager 에서는 retry 함수를 출력할 수 없기 때문에 Panel Script 를 만들어서 그 곳에서 출력 시키도록 한다.
Why? 왜 retry 함수를 출력도 할 수 없는 GameManager Script 에서 관리를 할까?
: retry 는 Scene 을 새로고침하는 기능으로 많은 부분에서 이 기능을 자주 사용한다.
자주 사용하는 기능을 panel 이라는 개인 요소에서 관리하기에는 너무나 큰 기능이기 때문에 GameManager 에서 관리를 하는 것이다.
3) 다시 시작 기능을 출력 시키기
: Project → Script 오른쪽 버튼 클릭 → Create → C# Script 생성 (파일명 : panel)
: Hierarchy 에 있는 Panel Scene 에 panel Script 드래그 하여 넣기
[panel C# Script]
public void retry() { GameManager.I.retry(); } [설명] GameManager.I.retry(); : GameManager 에 있는 retry 함수를 실행 시킨다. |
4) 게임 오버 Button 에 기능 추가하기
: Panel Inspector 에 있는 Button Component 에 On Click () 에 (+) 키를 눌러 추가한다.
: Hierarchy 에 있는 Panel Canvas UI 를 드래그해서 추가하고 panel.retry 를 추가한다.
6. 게임 데이터 초기화 하기
: 게임을 다시 시작할 때, 빗방울 점수와 남은시간을 초기화 시켜 준다.
[GameManager C# Script]
void initGame() { Time.timeScale = 1.0f; totalScore = 0; limit = 60f; } [설명] Time.timeScale = 1.0f; : 시간을 정상으로 흐르게 한다는 의미이다. (1 = 기본 배속) totalScore = 0; : Score 의 값을 0으로 설정한다. limit = 60f; : limit 의 값을 60초로 설정한다. |
'Unity 기초' 카테고리의 다른 글
풍선을 지켜라 - 네모 박스 만들기 (0) | 2023.12.29 |
---|---|
풍선을 지켜라 - 게임 구성 요소 만들기 (0) | 2023.12.29 |
르탄이 빗방울 게임 - 빗방울 점수 획득하기 (0) | 2023.12.28 |
르탄이 빗방울 게임 - 빗방울 복제하기 (0) | 2023.12.28 |
르탄이 빗방울 게임 - 빗방울 랜덤 설정 (0) | 2023.12.27 |