1. 소개
- 원터치 2D 어드벤쳐
- 스테이지 클리어 방식
- 턴제 RPG
- 메인 프로그래머
- 제작기간: 3개월
- Unity 2017.3.0f3
2. 핵심
![]() 맵탐험: 가지 않은 길은 시야가 없음 한번 지나간 길, 도착지점은 시야 존재 |
![]() 턴제 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 |
영웅들의 능력치는 미리 설정된(기획에서 넘어온) 능력치에 따른다.
레벨업 시에 고정스펙으로 캐릭터가 세팅된다.
고정데이터로서 구현 기간이 짧았던 것으로 기억한다.
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의 존재까지 처음 알았다.
다 처음 알았던 플랫폼과 시스템, 데이터 구성 방식이어서 꽤 고생했었다.
하지만 다른 두 명의 팀원들로 무사히(?) 완성했던 걸로 기억한다.
'UNITY' 카테고리의 다른 글
Lord of Fishing [팀 제작게임, 2D Mobile, PHP] (0) | 2024.05.15 |
---|---|
메르헨엘리스 [팀 자체제작, 3D, 착시효과] (0) | 2024.05.03 |
PACMAN [개인 모작] (0) | 2021.09.05 |
ASTROBOX [팀 자체제작, 3D, 퍼즐] (0) | 2021.09.05 |