cosmic developer

[Unity 2D] 게임 시작 전 카운트다운 화면 만들기 (C#) 본문

Programming Languages/Unity

[Unity 2D] 게임 시작 전 카운트다운 화면 만들기 (C#)

ti:bot 2020. 3. 9. 03:07

게임 시작 버튼을 눌렀을 때 카운트다운 없이 바로 게임이 시작된다면 얼마나 당황스러울까?

본격적으로 게임을 시작하기 전에 먼저 3, 2, 1, 시작을 외치는 카운트다운 화면을 구현해보자.


먼저 준비물은 카운트다운 화면을 준비할 Scene, 그리고 소스코드를 작성할 Script, 마지막으로 각 초마다 화면에 나타날 이미지들이다. 씬 추가와 스크립트 추가하는 방법은 워낙 간단하고 유니티로 개발한다면 몰라서는 안되기 때문에 방법만 간단하게 써두겠다.




1) Scene 만들기

좌측 맨 위 File → New Scene



2) Script 만들기

Project 영역에서 우클릭 → Create → C# Script → 스크립트 파일의 이름을 설정하자!



3) 소스코드 작성

나는 튜토리얼 화면을 포함하여 튜토리얼 → 3 → 2 → 1 → 시작 이렇게 총 5가지 화면을 보여주는 작업을 하였다. 과정이 더 적거나 많더라도 어차피 방법은 같고 워낙 간단하기 때문에 Timer의 범위만 조절하면 얼마든지 응용 가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameCountdown : MonoBehaviour
{
    private int Timer = 0;
    public GameObject IMG_tutorial; // 튜토리얼 이미지
    public GameObject Num_A;   //1번
    public GameObject Num_B;   //2번
    public GameObject Num_C;   //3번
    public GameObject Num_GO;   //시작 이미지
    
    void Start()
    {
        //시작시 카운트 다운 초기화, 게임 시작 false 설정
        Timer = 0;
        // 튜토리얼, 나머지 (카운트다운 이미지) 안보이기
        IMG_tutorial.SetActive(false);
        Num_A.SetActive(false);
        Num_B.SetActive(false);
        Num_C.SetActive(false);
        Num_GO.SetActive(false);
    }
    
    void Update()
    {
        //게임 시작시 정지
        if (Timer == 0)
        {
            Time.timeScale = 0.0f;
        }
        //Timer 가 90보다 작거나 같을경우 Timer 계속증가
        if (Timer <= 150)
        {
            Timer++;
            
 
            // Timer가 60보다 작을경우 튜토리얼 켜기
            if (Timer < 60)
            {
                IMG_tutorial.SetActive(true);
            }
            // Timer가 60보다 클경우 튜토리얼 끄고 3켜기
            if (Timer > 60)
            {
                IMG_tutorial.SetActive(false);
                Num_C.SetActive(true);
            }
            // Timer가 90보다 작을경우 3끄고 2켜기
            if (Timer > 90)
            {
                Num_C.SetActive(false);
                Num_B.SetActive(true);
            }
            // Timer 가 120보다 클경우 2끄고 1켜기
            if (Timer > 120)
            {
                Num_B.SetActive(false);
                Num_A.SetActive(true);
            }
            // Timer 가 150보다 크거나 같을 경우 1끄고 시작 켜기 LoadingEnd () 코루틴호출
            if (Timer >= 150)
            {
                Num_A.SetActive(false);
                Num_GO.SetActive(true);
                StartCoroutine(this.LoadingEnd());
                Time.timeScale = 1.0f; //게임시작
            }
        }
    }
    
    IEnumerator LoadingEnd()
    {
        yield return new WaitForSeconds(1.0f);
        Num_GO.SetActive(false);
    }
    
}
cs


Line(4) - GameCountdown은 2)에서 새롭게 만든 스크립트의 이름이다. 임의로 수정하면 오류가 발생하기 때문에 수정이 필요하다면 스크립트를 저장하고 유니티에서 작업하도록 하자.

소스 코드 참고 블로그




4) 스크립트 적용하기

스크립트를 저장했다면 다시 Unity 화면으로 넘어오자. Project 영역에 준비해뒀던 준비물들을 작업중인 Scene의 Hierarchy 영역으로 드래그한다.


나는 Panel을 만들고 그 아래에 사용할 이미지들을 배치했다.


위 과정이 완료되었다면 스크립트 컴포넌트를 추가하면 되는데, 개인적으로 countdown_PanelUI에 적용하는 것이 가장 깔끔해보였다. 어쨌든 스크립트 컴포넌트를 추가하는 방법이 몇 가지 있지만 나는 프로젝트 영역에서 바로 드래그하는 것을 좋아한다. 스크립트를 추가했다면 인스펙터 창에서 다음와 같이 카메라와 스크립트 변수의 빈 곳을 채운다.




5) 실행하기

모든 설정이 완료된 후 실행 버튼을 클릭하면 카운트다운 화면이 잘 구현되었음을 확인할 수 있다. 튜토리얼 이미지는 구현 안된 것이 아니라 그 부분은 빼고 첨부했다.