본문 바로가기

기타

왕초보개발자가 유니티로 게임만들기!(11)

반응형

 

저번시간까지는 승부 버튼을 누르면 플레이어의 상태도 저장하고,

 

적이 어떤것을 냈는지까지 나오게 만들었습니다.

 

이제 본격적인 결과를 내고, 결과화면을 만들것입니다.

 

 결과를 계산하여 결과화면 보여주기

 

 

이제 결과를 계산하기 위해 아래의 코드를 참조하여 붙혀넣기를 해줍니다.

 

 

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
using UnityEngine;
using System.Collections;


//각 플레이어의 상태를 지정하기위한 열거형
enum Player_State
{
    Ga,Ba,Bo
};


public class GM : MonoBehaviour {


    Player_State _player_State;
    Player_State _enemy_State;


    //유저와 적의 이미지, 결과 이미지
    public UISprite player_Img;
    public UISprite enemy_Img;
    public UISprite result_Img;




    //카운트 이미지
    public UISprite count_Img;


    //유저의 버튼
    public GameObject player_Ga_Button;
    public GameObject player_Ba_Button;
    public GameObject player_Bo_Button;
    
    //승부 버튼
    public GameObject stop_Button;


    //게임의 시작 유무를 체크
    bool gameStart = false;


    //프레임마다 이미지를 바꾸기 위한 카운트
    int _cnt;




    // Use this for initialization
    void Start () {


        //카운트 코루틴 호출
        StartCoroutine(Count());
    }


    // Update is called once per frame
    void Update()
    {
        //게임 시작이 되면 이미지를 마구 섞어주는 효과를 준다.
        if (gameStart)
        {
            _cnt++;


            if (_cnt > 0)
            {
                enemy_Img.spriteName = "Ga";
            }
            if (_cnt > 1)
            {
                enemy_Img.spriteName = "Ba";
            }
            if (_cnt > 2)
            {
                enemy_Img.spriteName = "Boouo";
                _cnt = 0;
            }
        }
    }


    //카운트 코루틴
    IEnumerator Count()
    {
        count_Img.spriteName = "3";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "2";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "1";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "Go";


        //시작된 이후에는, 가위바위보 선택버튼과 승부 버튼을 On 해준다.
        player_Ga_Button.gameObject.SetActive(true);
        player_Ba_Button.gameObject.SetActive(true);
        player_Bo_Button.gameObject.SetActive(true);


        stop_Button.gameObject.SetActive(true);


        //게임 시작을 알려줌.
        gameStart = true;
    }


    //유저가 버튼을 눌러 이미지를 변경하고, 플레이어의 상태도 바꿔주는 메소드 모음
    void PlayerButtonImgChange_Ga()
    {
        player_Img.spriteName = "Ga";
        _player_State = Player_State.Ga;
    }


    void PlayerButtonImgChange_Ba()
    {
        player_Img.spriteName = "Ba";
        _player_State = Player_State.Ba;
    }


    void PlayerButtonImgChange_Bo()
    {
        player_Img.spriteName = "Boouo";
        _player_State = Player_State.Bo;
    }


    //게임의 승부를 결정짓는다.
    void GameEndButton()
    {
        //게임이 끝났으므로 다시 Start를 false로 바꿔준다.
        gameStart = false;


        //적이 어떤 것을 낼지 결정하고 보여준다.
        int _randomNum = Random.Range(03);


        if (_randomNum == 0)
        {
            enemy_Img.spriteName = "Ga";
            _enemy_State = Player_State.Ga;
        }
        else if(_randomNum == 1)
        {
            enemy_Img.spriteName = "Ba";
            _enemy_State = Player_State.Ba;
        }
        else if(_randomNum == 2)
        {
            enemy_Img.spriteName = "Boouo";
            _enemy_State = Player_State.Bo;
        }


        //플레이어와 적이 낸 것을 비교한 후, 결과 화면을 보여준다.


        //결과 화면 이미지를 On해준다.
        result_Img.gameObject.SetActive(true);


        //플레이어가 가위를 냈을때
        if(_player_State == Player_State.Ga)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Draw";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Lose";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Win";
            }
        }


        //플레이어가 바위를 냈을때
        if (_player_State == Player_State.Ba)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Win";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Draw";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Lose";
            }
        }




        //플레이어가 보를 냈을때
        if (_player_State == Player_State.Bo)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Lose";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Win";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Draw";
            }
        }
        
    }
}




Colored by Color Scripter
cs

 

이 코드에서 추가된 내용은, 플레이어가 낸 것에 따라 결과가 어떻게 구성되고 바뀌는지에 대해서 추가되었습니다.



코드를 쓰고 나면 GM스크립트의 Result_Img 부분이 None으로 되어있을 것입니다.

 

하이어라키에서 끌어서 넣어주세요.

 

 

이제 게임을 진행하시면!

 

 

이런식으로 허접하게 결과가 나옵니다.

 

 결과화면 깔끔하게 마무리 짓고, First씬으로 되돌아가는 버튼 만들기

 

 

하이어라키에 있는 게임오브젝트들을 다 활용했는데!

 

Button_GotoFirst 라는 게임오브젝트만 현재 활용을 못하고 있습니다.

 

이제 이녀석을 사용할 차례입니다.

 

아마 이게 최종코드가 될 것입니다.

 

 

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213


using UnityEngine;
using System.Collections;


//각 플레이어의 상태를 지정하기위한 열거형
enum Player_State
{
    Ga,Ba,Bo
};


public class GM : MonoBehaviour {


    Player_State _player_State;
    Player_State _enemy_State;


    //유저와 적의 이미지, 결과 이미지
    public UISprite player_Img;
    public UISprite enemy_Img;
    public UISprite result_Img;




    //카운트 이미지
    public UISprite count_Img;


    //유저의 버튼
    public GameObject player_Ga_Button;
    public GameObject player_Ba_Button;
    public GameObject player_Bo_Button;
    
    //승부 버튼
    public GameObject stop_Button;


    //Fist씬으로 돌아가는 버튼
    public GameObject goto_First_Button;


    //게임의 시작 유무를 체크
    bool gameStart = false;


    //프레임마다 이미지를 바꾸기 위한 카운트
    int _cnt;




    // Use this for initialization
    void Start () {


        //카운트 코루틴 호출
        StartCoroutine(Count());
    }


    // Update is called once per frame
    void Update()
    {
        //게임 시작이 되면 이미지를 마구 섞어주는 효과를 준다.
        if (gameStart)
        {
            _cnt++;


            if (_cnt > 0)
            {
                enemy_Img.spriteName = "Ga";
            }
            if (_cnt > 1)
            {
                enemy_Img.spriteName = "Ba";
            }
            if (_cnt > 2)
            {
                enemy_Img.spriteName = "Boouo";
                _cnt = 0;
            }
        }
    }


    //카운트 코루틴
    IEnumerator Count()
    {
        count_Img.spriteName = "3";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "2";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "1";
        yield return new WaitForSeconds(1.0f);
        count_Img.spriteName = "Go";


        //시작된 이후에는, 가위바위보 선택버튼과 승부 버튼을 On 해준다.
        player_Ga_Button.gameObject.SetActive(true);
        player_Ba_Button.gameObject.SetActive(true);
        player_Bo_Button.gameObject.SetActive(true);


        stop_Button.gameObject.SetActive(true);


        //게임 시작을 알려줌.
        gameStart = true;
    }


    //유저가 버튼을 눌러 이미지를 변경하고, 플레이어의 상태도 바꿔주는 메소드 모음
    void PlayerButtonImgChange_Ga()
    {
        player_Img.spriteName = "Ga";
        _player_State = Player_State.Ga;
    }


    void PlayerButtonImgChange_Ba()
    {
        player_Img.spriteName = "Ba";
        _player_State = Player_State.Ba;
    }


    void PlayerButtonImgChange_Bo()
    {
        player_Img.spriteName = "Boouo";
        _player_State = Player_State.Bo;
    }


    //게임의 승부를 결정짓는다.
    void GameEndButton()
    {
        //게임이 끝났으므로 다시 Start를 false로 바꿔준다.
        gameStart = false;


        //적이 어떤 것을 낼지 결정하고 보여준다.
        int _randomNum = Random.Range(03);


        if (_randomNum == 0)
        {
            enemy_Img.spriteName = "Ga";
            _enemy_State = Player_State.Ga;
        }
        else if(_randomNum == 1)
        {
            enemy_Img.spriteName = "Ba";
            _enemy_State = Player_State.Ba;
        }
        else if(_randomNum == 2)
        {
            enemy_Img.spriteName = "Boouo";
            _enemy_State = Player_State.Bo;
        }


        //플레이어와 적이 낸 것을 비교한 후, 결과 화면을 보여준다.


        //결과 화면 이미지를 On해준다.
        result_Img.gameObject.SetActive(true);


        //플레이어가 가위를 냈을때
        if(_player_State == Player_State.Ga)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Draw";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Lose";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Win";
            }
        }


        //플레이어가 바위를 냈을때
        if (_player_State == Player_State.Ba)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Win";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Draw";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Lose";
            }
        }




        //플레이어가 보를 냈을때
        if (_player_State == Player_State.Bo)
        {
            if (_enemy_State == Player_State.Ga)//적이 가위를 냄
            {
                result_Img.spriteName = "Lose";
            }
            else if (_enemy_State == Player_State.Ba)//적이 바위를 냄
            {
                result_Img.spriteName = "Win";
            }
            else if (_enemy_State == Player_State.Bo)//적이 보를 냄
            {
                result_Img.spriteName = "Draw";
            }
        }


        //쓸데없는 버튼들과 UI는 모두 Off를 해준다
        player_Ga_Button.gameObject.SetActive(false);
        player_Ba_Button.gameObject.SetActive(false);
        player_Bo_Button.gameObject.SetActive(false);


        stop_Button.gameObject.SetActive(false);


        //First씬으로 되돌아 가는 버튼을 On해준다.
        goto_First_Button.gameObject.SetActive(true);
    }


    void GoToFirst()
    {
        Application.LoadLevel("First");
    }
}


Colored by Color Scripter
cs

 

 

이번 코드에서는, 마지막으로 게임이 끝났기 때문에 게임진행과 관련된 UI를 모두 Off해주고

 

First씬으로 돌아가기 위한 버튼생성을 위한 코드가 추가되었습니다.

 

코드를 추가하고나면 아래와 같이 버튼오브젝트를 드래그앤드롭으로 추가해줍니다.





 

그리고 마지막으로 버튼이 어떤 메소드를 호출할지 넣어줍니다!

 

이러면 모든 게임의 한 사이클이 완성되었습니다!

 

게임이 끝나면 First씬으로 가는 버튼이 생길것이며 누르면 First씬으로 넘어가고 다시 버튼을 누르면 MainGame씬으로 넘거가는

 

무한반복이 가능해집니다.

 

게임 제작은 여기까지 끝났습니다!!!!

 

 

신난다!~~~

 

 마치며

 

 

뒤로 갈수록 앞서 설명했던 것들의 노가다가 연속이 많이 될 것입니다.

 

원래 모든건 반복연습이 중요합니다. 열심히 하다보면 눈감고도 코딩하는 실력이 되실겁니다(는 훼이크?)

 

다음시간엔 마지막으로 PC버전으로 빌드하는 것을 해보고 마치도록 하겠습니다!

반응형