반응형

대표 제목

시연 영상

1. 소개

- 원터치 2D 어드벤쳐
- 스테이지 클리어 방식

- 턴제 RPG
- 메인 프로그래머

- 제작기간: 3개월

- Unity 2017.3.0f3

 

2. 핵심

맵탐험


맵탐험: 가지 않은 길은 시야가 없음
한번 지나간 길, 도착지점은 시야 존재
턴제 RPG


턴제 RPG: 적과 유저가 번갈아가며 공격, 방어를 진행

 

3. 맵구현

3.1 로비



로비 전체
오브젝트 접근 시 강조표시, 체크UI 활성화


장비점검
캐릭터 세 개의 서로 다른 장비(스태프, 검 등)를 관리


스토리진행
스토리 오브젝트에서 남은 퀘스트를 수주


상점
물약, 장비 등등의 아이템들을 구매, 판매 진행

 

3.2 퍼즐내부



몬스터와의 전투


보너스 블록 진행 시 퍼즐 진행(모든 블록을 같게)


전투를 통한 아이템 획득(정보보기)


도착 블럭 시 다음 스테이지 해금

 

위 3.1와 3.2의 스토리와 맵진행(맵뚫기)을 진행하면 다음 맵으로 이동할 수 있습니다. 총 5 스테이지

내부에서 돌아다니다 무작위로 전투이벤트가 발생합니다.

 

4. 구현

4.1 맵작성



맵 에디터


타일이 제작된 모습

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Data>
  <Map_Size>    10    8</Map_Size>
  <Char_Pos>    0.02074099    -3.339259    4.8</Char_Pos>
  <Row0>10    10    10    10    10    0    0    0    10    21    </Row0>
  <Row1>10    0    0    0    10    10    10    10    10    0    </Row1>
  <Row2>21    36    0    34    0    10    10    0    0    36    </Row2>
  <Row3>0    0    0    10    0    10    10    10    10    10    </Row3>
  <Row4>0    10    10    10    10    10    0    0    10    10    </Row4>
  <Row5>0    10    0    0    10    0    35    10    10    10    </Row5>
  <Row6>10    10    0    10    10    0    0    0    0    0    </Row6>
  <Row7>10    10    0    36    10    10    10    10    10    20    </Row7>
</Data>
cs

 

위 맵의 xml 파일

 

4.2 모바일 해상도 설정

QHD, FHD 해상도 설정 Canvas Scaler로 비율 조정

 

4.3 시야구현

 

Scene 창을 보면, 퍼즐 하나당 사각형 이미지를 따서 Cookie로 구운 Spotlight 조명(사각형) 설정

단, 중첩이 없어야 한다.

길이 열릴 때마다 해당 조명을 하나씩 켠다.(Fade-In)

 

4.4 턴제 RPG - 전투



공격, 스킬, 아이템, 방어, 도망가기 중 택1


아이템 설정


스킬 설정


최종 집행 전 확인

 

4.5 미니게임: 퍼즐

이 미니게임은 주인장 ASTROBOX의 규칙과 같다.

 

https://mtding00.tistory.com/67

 

ASTROBOX [팀 자체제작, 3D, 퍼즐]

이 게임은 첫 팀 프로젝트 게임일 수 있겠다. 제작기간은 1달 남짓이며, 기획과 프로그래머, 그래픽의 역할이 분리되어 소스를 받아 작업한 최초의 결과물이다. 본인은 메인 프로그래머를 맡았

mtding00.tistory.com

당연하지만, 그래픽만 3D일 뿐 게임방식은 2D라 가져올 수 있었다.

 

4.6 데이터: 유저 셋

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
<?xml version="1.0" encoding="UTF-8"?>
<rows>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>1</LEVEL>
    <CHAR_ATK>6</CHAR_ATK>
    <CHAR_DEF>10</CHAR_DEF>
    <CHAR_HP>100</CHAR_HP>
    <EXP>0</EXP>
    <ACC_EXP>0</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>2</LEVEL>
    <CHAR_ATK>8</CHAR_ATK>
    <CHAR_DEF>13</CHAR_DEF>
    <CHAR_HP>116</CHAR_HP>
    <EXP>100</EXP>
    <ACC_EXP>100</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>3</LEVEL>
    <CHAR_ATK>11</CHAR_ATK>
    <CHAR_DEF>17</CHAR_DEF>
    <CHAR_HP>134</CHAR_HP>
    <EXP>140</EXP>
    <ACC_EXP>240</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>4</LEVEL>
    <CHAR_ATK>15</CHAR_ATK>
    <CHAR_DEF>23</CHAR_DEF>
    <CHAR_HP>154</CHAR_HP>
    <EXP>325</EXP>
    <ACC_EXP>565</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>5</LEVEL>
    <CHAR_ATK>21</CHAR_ATK>
    <CHAR_DEF>30</CHAR_DEF>
    <CHAR_HP>196</CHAR_HP>
    <EXP>375</EXP>
    <ACC_EXP>940</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>6</LEVEL>
    <CHAR_ATK>28</CHAR_ATK>
    <CHAR_DEF>39</CHAR_DEF>
    <CHAR_HP>201</CHAR_HP>
    <EXP>445</EXP>
    <ACC_EXP>1385</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>7</LEVEL>
    <CHAR_ATK>36</CHAR_ATK>
    <CHAR_DEF>49</CHAR_DEF>
    <CHAR_HP>230</CHAR_HP>
    <EXP>510</EXP>
    <ACC_EXP>1895</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>8</LEVEL>
    <CHAR_ATK>45</CHAR_ATK>
    <CHAR_DEF>61</CHAR_DEF>
    <CHAR_HP>263</CHAR_HP>
    <EXP>570</EXP>
    <ACC_EXP>2465</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>9</LEVEL>
    <CHAR_ATK>55</CHAR_ATK>
    <CHAR_DEF>74</CHAR_DEF>
    <CHAR_HP>301</CHAR_HP>
    <EXP>630</EXP>
    <ACC_EXP>3095</ACC_EXP>
  </row>
  <row>
    <CHAR_NAME>JASON</CHAR_NAME>
    <LEVEL>10</LEVEL>
    <CHAR_ATK>67</CHAR_ATK>
    <CHAR_DEF>89</CHAR_DEF>
    <CHAR_HP>345</CHAR_HP>
    <EXP>690</EXP>
    <ACC_EXP>3785</ACC_EXP>
  </row>
</rows>
cs

 

영웅1(Jason)의 상태

 

영웅들의 능력치는 미리 설정된(기획에서 넘어온) 능력치에 따른다.

레벨업 시에 고정스펙으로 캐릭터가 세팅된다.

고정데이터로서 구현 기간이 짧았던 것으로 기억한다.

 

4.7 데이터: 인벤토리, 유저 데이터 스택

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
<?xml version="1.0" encoding="utf-8"?>
<UserItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ITEM>
    <ID>1</ID>
    <COUNT>1</COUNT>
  </ITEM>
  <ITEM>
    <ID>2</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>3</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>4</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>5</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>6</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>7</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>8</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>9</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>10</ID>
    <COUNT>1</COUNT>
  </ITEM>
  <ITEM>
    <ID>11</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>12</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>13</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>14</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>15</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>16</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>17</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>18</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>19</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>20</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>21</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>22</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>23</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>24</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>25</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>26</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>27</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>28</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>29</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>30</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>31</ID>
    <COUNT>1</COUNT>
  </ITEM>
  <ITEM>
    <ID>32</ID>
    <COUNT>7</COUNT>
  </ITEM>
  <ITEM>
    <ID>33</ID>
    <COUNT>3</COUNT>
  </ITEM>
  <ITEM>
    <ID>34</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>35</ID>
    <COUNT>1</COUNT>
  </ITEM>
  <ITEM>
    <ID>36</ID>
    <COUNT>90</COUNT>
  </ITEM>
  <ITEM>
    <ID>37</ID>
    <COUNT>99</COUNT>
  </ITEM>
  <ITEM>
    <ID>38</ID>
    <COUNT>89</COUNT>
  </ITEM>
  <ITEM>
    <ID>39</ID>
    <COUNT>89</COUNT>
  </ITEM>
  <ITEM>
    <ID>40</ID>
    <COUNT>0</COUNT>
  </ITEM>
  <ITEM>
    <ID>41</ID>
    <COUNT>0</COUNT>
  </ITEM>
</UserItem>
cs

 

 

인벤토리 구현 데이터

 

 

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
<?xml version="1.0" encoding="utf-8"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Hero>
    <LEVEL>2</LEVEL>
    <EXP>80</EXP>
    <HP>105</HP>
    <WEAPON>1</WEAPON>
    <ARMOR>0</ARMOR>
    <ACCESSORY>24</ACCESSORY>
    <CANDY>16</CANDY>
  </Hero>
  <Hero>
    <LEVEL>2</LEVEL>
    <EXP>80</EXP>
    <HP>19</HP>
    <WEAPON>0</WEAPON>
    <ARMOR>0</ARMOR>
    <ACCESSORY>24</ACCESSORY>
    <CANDY>0</CANDY>
  </Hero>
  <Hero>
    <LEVEL>2</LEVEL>
    <EXP>80</EXP>
    <HP>91</HP>
    <WEAPON>0</WEAPON>
    <ARMOR>0</ARMOR>
    <ACCESSORY>0</ACCESSORY>
    <CANDY>0</CANDY>
  </Hero>
</User>
cs

 

유저의 히어로 현상태 누적 데이터

 

위 두 데이터는 게임 진행 간 변동되는 데이터들로 저장보다 로드하여 적용하는 부분에서 애를 좀 먹었었다.

 

 

5. 정리

본 프로젝트는 Xml 위주의 데이터를 다루었었다. 해당 기간에 나는 xml, json의 파일 구조 존재 및 구성 방식을 공부했었다.

내 게임 인생 살이에 처음으로 1만줄 코드를 넘었던 순간이었던 것 같다.

(ㅎㅎ...;; 하지만 그때 1만 줄도 힘들었던 걸 어떡하냐.)

 

모바일 연동도 하면서 이 때 Android Studiio의 존재까지 처음 알았다.

다 처음 알았던 플랫폼과 시스템, 데이터 구성 방식이어서 꽤 고생했었다.

하지만 다른 두 명의 팀원들로 무사히(?) 완성했던 걸로 기억한다.

반응형
Posted by Lotus' Library
,