GSM 페스티벌 마무으리

박지예·2022년 1월 5일
1

매혈자의 난

목록 보기
1/1
post-thumbnail

광주소프트웨어마이스터고등학교에서는 막달

GSM 페스티벌

이라는 것을 진행한다

학교에서 하는 하나의 작은 해커톤이며, 약 두 달동안 팀들과 하나의 작품을 만들어 내는 행사다


아직 1학년인 우리는 각반의 같은 번호끼리 팀이 되었다

모두 어색하고 각자 다른 전공을 가졌지만, 결과적으론 무사히 작품을 만들 수 있었다

프로젝트 정리 노션

프로젝트에서 얻은 것 🔥

1. 개발 실력

당연하지만, 유니티 클라이언트 개발 실력을 기를 수 있었다

위에서는 xml 파일 파싱과 서버 연결정도만 설명했지만, 그 외에도 자잘한 버그들과, UI 배치 등 여러 문제들을 해결하며 개발 실력을 늘렸다

학교에서 만난 선배님들과 멘토님 덕분에 새로운 코드를 만나도 두렵지 않았다

뿐 아니라 에러를 수정하면서, 코드를 어떻게 관리 해야하는지에 대해서 따로 공부하기도 했다

SOLID

⬆ 위 글은 다시 프로젝트를 진행할때 공부했던 글이다

2. 끈기

위의 겻과 연결되는 것이다

새로운 기능을 한 개 만들면 2배로 에러들이 나왔다

결국 개발 중반 전부 삭제하고 다시 만들기도 했다

그때마다 포기하고 싶은 마음이 들었지만 여태까지 했던 게 아까웠고, 주변에 지켜봐 주는 사람이 있어서 끝까지 마무리 지을 수 있었다

그러면서, 프로젝트에 대한 책임감과 포기하지 않는 끈기를 배웠다

3. 커뮤니케이션 능력

이번 프로젝트 전에도 여러 프로젝트를 진행하면서 여러 사람들과 협업 하였다

그때마다 커뮤니케이션 능력이 프로젝트의 완성도와 직접적으로 연관되어 있다는걸 알 수 있었다

이번에는 기획을 담당했던 친구와 의견충돌이 잦았다

기획에서 클라이언트 직무에 대한 이해부족이 문제였다

이런 상황들은 학교 내에 다른 팀들한테도 나타났다

그들중 대부분이 서로의 의견차이로 싸우게 되고 결국 틀어져서 갈라서게 된 팀들도 있었다

그러나 나는 다른 팀원들에게 나의 입장을 차분히 설명해 설득시켰다

나의 의견을 내세우면서, 상대방을 이해하려는 태도를 가지게 되었다

나의 이런 노력을 알아준 팀원은 그 뒤로 서로의 의견을 빠르게 이해하고 피드백을 받아들이게 되었다

코드 작성

다이알로그 시스템

이 게임은 텍스트 기반 게임이기 때문에 대사 스크립트를 관리하는 것이 게임의 가장 중요한 부분이였다

  • Dialogue.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    [System.Serializable]
    public struct Dialogue
    {
        [Tooltip("대사 치는 캐릭터 이름")]
        public string[] names;
        [Tooltip("대사 내용")]
        [TextArea(3, 10)]
        public string[] sentences;
        public Sprite[] img;
    
        public Dialogue(string[] names, string[] sentences, Sprite[] img)
        {
            this.names = names;
            this.sentences = sentences;
            this.img = img;
        }
    }

⬆대사의 구조를 짜서

  • Dialogue.xml
    <?xml version="1.0" encoding="utf-8"?>
    <dataroot>
    	<!--시작-->
    	<!--버튼-->
    	<Start>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>태어난 지 10000일 되는 새미누리는 오늘도 기운 없이 일어났다</Dialogue>
    	</Start>
    	<Start>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>그녀는 세레스라는 행성에서 살고 있다</Dialogue>
    	</Start>
    	<Start>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 하루 벌어 하루 먹고 산다</Dialogue>
    	</Start>
    	<Start>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 동생을 만나기 위해 돈을 많이 벌어야 한다</Dialogue>
    	</Start>
    	<Start>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 피를 팔아 많은 돈을 벌 것이다</Dialogue>
    	</Start>
    
    	<!--공원-->
    	<!--버튼-->
    	<Park>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>많은 사람이 있는 광장.</Dialogue>
    	</Park>
    	<Park>
    		<ID>2</ID>
    		<Name> </Name>
    		<Dialogue>높은 분수가 설치된 공원 가운데를 중심으로 숲과 은하가 둘러쌓여 있다</Dialogue>
    	</Park>
    	<Park>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>분수 옆에서 복권을 파는 것 같다</Dialogue>
    
    	</Park>
    	<Park>
    		<Id>4</Id>
    		<Name></Name>
    		<Dialogue>복권 하나에 100크레딧이다</Dialogue>
    	</Park>
    	<Park>
    		<Id>5</Id>
    		<Name></Name>
    		<Dialogue>한 번 해볼까?</Dialogue>
    	</Park>
    	<!--숫자 3개 다 맞췄을 때-->
    	<Winning>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>카드에 뽑힌 숫자 3개가 모두 똑같았다</Dialogue>
    	</Winning>
    	<Winning>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 9744크래딧을 벌었다</Dialogue>
    	</Winning>
    	<!--틀렸을 때-->
    	<Loseing>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 100 크레딧을 그냥 날렸다</Dialogue>
    	</Loseing>
    
    	<!--혈액 관리소-->
    	<!--버튼-->
    	<BloodShop>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>혈액관리소는 몸만 건강하다면 모든 피를 사주고 있다</Dialogue>
    	</BloodShop>
    	<BloodShop>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 혈액 채취기를 향해 손을 뻗었다</Dialogue>
    	</BloodShop>
    
    	<!--건강한 상태-->
    	<GoodBlood>
    		<Id>1</Id>
    		<Name></Name>
    		<Dialogue>혈액 채취기가 새미누리를 스캔하더니</Dialogue>
    	</GoodBlood>
    	<GoodBlood>
    		<Id>2</Id>
    		<Name></Name>
    		<Dialogue>모니터에 초록색 화면이 뜬다</Dialogue>
    	</GoodBlood>
    	<GoodBlood>
    		<Id>3</Id>
    		<Name></Name>
    		<Dialogue>새미누리의 팔에서 피 500ml가 빠져나갔다</Dialogue>
    	</GoodBlood>
    	<GoodBlood>
    		<Id>4</Id>
    		<Name></Name>
    		<Dialogue>새미누리의 통장에 5000크레딧이 들어왔다</Dialogue>
    	</GoodBlood>
    
    	<!--건강하지 못한 상태-->
    	<BadBlood>
    		<Id>1</Id>
    		<Name></Name>
    		<Dialogue>혈액 채취기가 새미누리를 스캔하더니</Dialogue>
    	</BadBlood>
    	<BadBlood>
    		<Id>2</Id>
    		<Name></Name>
    		<Dialogue>모니터에 초록색 화면이 뜬다</Dialogue>
    	</BadBlood>
    	<BadBlood>
    		<Id>3</Id>
    		<Name></Name>
    		<Dialogue>새미누리는 빈손으로 혈액관리소를 나갈 수 밖에 없었다</Dialogue>
    	</BadBlood>
    
    	<!--항구-->
    	<!--버튼-->
    	<Spaceport>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 승강기를 탔다</Dialogue>
    	</Spaceport>
    	<Spaceport>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>올라갈수록 수직항력이 사라지면서 몸이 가벼워졌다</Dialogue>
    	</Spaceport>
    	<Spaceport>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 난간을 잡으며 우주항구에 도착했다</Dialogue>
    	</Spaceport>
    	<Spaceport>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 동생이 있는 유로파로 가고 싶다</Dialogue>
    	</Spaceport>
    	<Spaceport>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>티켓을 사려면 35,000,000 크레딧이 필요하다</Dialogue>
    	</Spaceport>
    
    	<!--집-->
    	<!--버튼-->
    	<House>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 지친 몸을 이끌고 정리를 한 뒤 침대에 누웠다</Dialogue>
    	</House>
    	<House>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 창문 밖에 별자리를 보면서 스르르 잠이 든다</Dialogue>
    	</House>
    	<House>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>그날 밤, 새미누리는 꿈을 꾼다</Dialogue>
    	</House>
    
    	<!--상점-->
    	<!--버튼-->
    	<Market>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 생필품을 사러 잡상품 판매소에 갔다</Dialogue>
    	</Market>
    	<!--돈이 없었을 시-->
    	<NoMoney>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 돈이 없다</Dialogue>
    	</NoMoney>
    	<!--물건들을 샀을 때-->
    	<Ramen>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 라면으로 허기를 달랬다</Dialogue>
    	</Ramen>
    	<Pill>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>약을 먹으니 몸이 회복되는 느낌이다</Dialogue>
    	</Pill>
    	<Knife>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 삶이 힘들긴 하지만,</Dialogue>
    	</Knife>
    	<Knife>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>아직 그런 선택을 할 정도는 아니다</Dialogue>
    	</Knife>
    	
    	<!--엔딩-->
    	<!--해피 엔딩-->
    	<HappyEnding>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 유로파에 무사히 도착하였다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 우주항구에서 해미누리를 열심히 찾아다녔다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>3</ID>
    		<Name>새미누리</Name>
    		<Dialogue>혹시 함선 조종사 해미누리를 보신적이 있나요??</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 열심히 돌아다니다가 우연히 대합실 앞을 지나쳤다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>익숙한 얼굴이 안내원 로봇과 싸우고 있었다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>6</ID>
    		<Name>해미누리</Name>
    		<Dialogue>운석충돌 위험 때문에 한시간이나 일찍 출발한다는게 말이 돼?</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>7</ID>
    		<Name>안내원 로봇</Name>
    		<Dialogue>죄송합니다, 저희는 규정대로 처리하였습니다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>8</ID>
    		<Name>해미누리</Name>
    		<Dialogue>세레스로 가기 위해 내가 노가다 뛰면서 얼마나 열심히 표값을 모은줄 알아?</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>9</ID>
    		<Name>안내원 로봇</Name>
    		<Dialogue>민원창구로 가서 보상절차를 밟아주시길 바랍니다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>10</ID>
    		<Name>해미누리</Name>
    		<Dialogue>지금 돈이 중요해? 이번 껄 놓치면 다음 함선까지 몇년을 기다려야 하는지 알아?</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>11</ID>
    		<Name>해미누리</Name>
    		<Dialogue>2년 6개월... 자그마치 2년 6개월이라고!!</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>12</ID>
    		<Name>안내원 로봇</Name>
    		<Dialogue>죄송합니다, 저희는 규정대로 처리하였습니다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>13</ID>
    		<Name>안내원 로봇</Name>
    		<Dialogue>민원창구로 가서 보상절차를 밟아주시길 바랍니다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>14</ID>
    		<Name>해미누리</Name>
    		<Dialogue>똑같은 말 그만..!</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>15</ID>
    		<Name>새미누리</Name>
    		<Dialogue>해미누리야... 이제 괜찮아...</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>16</ID>
    		<Name></Name>
    		<Dialogue>해미누리는 익숙한 목소리에 고개를 돌렸다</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>17</ID>
    		<Name>해미누리</Name>
    		<Dialogue>언니..?</Dialogue>
    	</HappyEnding>
    	<HappyEnding>
    		<ID>18</ID>
    		<Name></Name>
    		<Dialogue>-끝-</Dialogue>
    	</HappyEnding>
    
    	<!--꿈-->
    	<!--1번째-->
    	<Dream1>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 1160일</Dialogue>
    	</Dream1>
    	<Dream1>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>구름이 가득 찬 공중도시</Dialogue>
    	</Dream1>
    	<Dream1>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리와 해미누리는 같은 남매다</Dialogue>
    	</Dream1>
    	<Dream1>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>그들은 홀로그램에 띄워진 글자들을 익히고 있다</Dialogue>
    	</Dream1>
    	<Dream1>
    		<ID>5</ID>
    		<Name>새미누리</Name>
    		<Dialogue>가... 나... 다...</Dialogue>
    	</Dream1>
    	
    	<!--2번째-->
    	<Dream2>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 1480일</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>구름이 가득찬 공중도시</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>어느날 어머니는 새미누리에게 당부했다</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>당신이 나갔다 올 동안 동생인 해미누리를 잘 보살피라고 했다</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>그 다음날 어머니는 오지 않았다</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 배가 고파 해미누리의 이유식을 먹었다</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>7</ID>
    		<Name></Name>
    		<Dialogue>그 다음날 어머니가 돌아 오셨다</Dialogue>
    	</Dream2>
    	<Dream2>
    		<ID>8</ID>
    		<Name></Name>
    		<Dialogue>어머니는 그날 남에게 의지하는 삶을 살지 말라고 가르쳐주셨다</Dialogue>
    	</Dream2>
    	
    	<!--3번째-->
    	<Dream3>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 1640일</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성위 구름이 가득찬 공중도시</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리와 해미누리는 배우는 것을 좋아했다</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>이번에 배운 내용은 태양계 행성이였다</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>수성, 금성, 지구, 화성, 세레스, 목성,</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>토왕성, 천왕성, 명왕성, 하우메아</Dialogue>
    	</Dream3>
    	<Dream3>
    		<ID>7</ID>
    		<Name></Name>
    		<Dialogue>마케마케, 에리스, 콰오아, 세드나</Dialogue>
    	</Dream3>
    	
    	<!--4번째-->
    	<Dream4>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 5년</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리의 시간이 5바퀴를 돌았다</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>해미누리도 새미누리와 생일이 같았다</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>해미누리의 시간은 3바퀴를 돌았다</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>어머니께서 생일잔치를 열어주셨다</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>6</ID>
    		<Name>새미누리</Name>
    		<Dialogue>생일 축하 합니다~ 생일 축하 합니다~</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>7</ID>
    		<Name>새미누리</Name>
    		<Dialogue>사랑하는...</Dialogue>
    	</Dream4>
    	<Dream4>
    		<ID>8</ID>
    		<Name></Name>
    		<Dialogue>누구를 불러야하지?</Dialogue>
    	</Dream4>
    	
    	<!--5번째-->
    	<Dream5>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 1960일</Dialogue>
    	</Dream5>
    	<Dream5>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성 위 구름이 가득찬 공중도시</Dialogue>
    	</Dream5>
    	<Dream5>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 옥상 위에 있는 망원경을 잡았다</Dialogue>
    	</Dream5>
    	<Dream5>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>하늘에는 초록과 파랑빛이 섞인 지구가 아름답게 떠 있었다</Dialogue>
    	</Dream5>
    	<Dream5>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 그 옆에 새하얀 달도 바라보았다</Dialogue>
    	</Dream5>
    	<Dream5>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>그녀에게는 다 너무 작았다</Dialogue>
    	</Dream5>
    
    	<!--6번째-->
    	<Dream6>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 2280일</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성에서 경도 23크레딧 위도 03크레딧에 위치한 도시</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>3</ID>
    		<Name>새미누리</Name>
    		<Dialogue>자, 이게 드론이라는 거야</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>4</ID>
    		<Name>해미누리</Name>
    		<Dialogue>외계인 같다</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>5</ID>
    		<Name>새미누리</Name>
    		<Dialogue>유로파나 타이탄이나 엔셀라듀스의 어떤 생물체도 안 닮았는데?</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>해미누리는 스마트폰을 켜서 사진을 보여줬다</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>7</ID>
    		<Name>해미누리</Name>
    		<Dialogue>태양계 밖 외계인이라...</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>8</ID>
    		<Name>새미누리</Name>
    		<Dialogue>스마트폰으로 이상한 거 보지 말라고 했잖아</Dialogue>
    	</Dream6>
    	<Dream6>
    		<ID>9</ID>
    		<Name>해미누리</Name>
    		<Dialogue>재밌잖아, 같이 보자</Dialogue>
    	</Dream6>
    	
    	<!--7번째-->
    	<Dream7>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 2600일</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성 저궤도 우주정거장</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>3</ID>
    		<Name>새미누리</Name>
    		<Dialogue>우주승강기 타고 어디 가는지 알지, 해미야?</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>4</ID>
    		<Name>해미누리</Name>
    		<Dialogue>금성의 위성에 간다고 했잖아</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>5</ID>
    		<Name>새미누리</Name>
    		<Dialogue>어... 그랬나?</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>6</ID>
    		<Name>해미누리</Name>
    		<Dialogue>여기 우주선의 종착점에 가면 알 수 있을 꺼야</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>7</ID>
    		<Name>새미누리</Name>
    		<Dialogue>그런거 없어</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>8</ID>
    		<Name>해미누리</Name>
    		<Dialogue>그럼 우리 어디 가는거야?</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>9</ID>
    		<Name>새미누리</Name>
    		<Dialogue>어, 어라?</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>10</ID>
    		<Name></Name>
    		<Dialogue>어느순간 우주승강기가 목적지에 도착했다</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>11</ID>
    		<Name>새미누리</Name>
    		<Dialogue>도착?</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>12</ID>
    		<Name>해미누리</Name>
    		<Dialogue>우와, 사람들이 건물을 공중에 띄워났어</Dialogue>
    	</Dream7>
    	<Dream7>
    		<ID>12</ID>
    		<Name>새미누리</Name>
    		<Dialogue>와 진짜 아름답다</Dialogue>
    	</Dream7>
    	
    	<!--8번째-->
    	<Dream8>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 2760일</Dialogue>
    	</Dream8>
    	<Dream8>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>새미누리와 해미누리는 가장 오래된 도시로 여행을 왔다</Dialogue>
    	</Dream8>
    	<Dream8>
    		<ID>3</ID>
    		<Name>해미누리</Name>
    		<Dialogue>언니, 지구에서 가장 오래된 도시가 어디일까?</Dialogue>
    	</Dream8>
    	
    	<!--9번째-->
    	<Dream9>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 7880일</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성제1종합대학교</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>3</ID>
    		<Name>새미누리</Name>
    		<Dialogue>해미야 수고했어, 학사 취득했어</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>3</ID>
    		<Name>해미누리</Name>
    		<Dialogue>언니 축하해! 고생했어!</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>4</ID>
    		<Name>해미누리</Name>
    		<Dialogue>어머니가 옆에 있으셨다면 좋았을텐데...</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>5</ID>
    		<Name>새미누리</Name>
    		<Dialogue>어머니가 옆에 있으셨다면 뭐라고 하셨을까?</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>6</ID>
    		<Name>해미누리</Name>
    		<Dialogue>근데 이제 우리 뭐해?</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>7</ID>
    		<Name>새미누리</Name>
    		<Dialogue>아, 학교에서 지금 정부가 태양계 개발 산업이 진행중이란걸 들었어</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>8</ID>
    		<Name>해미누리</Name>
    		<Dialogue>웅?</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>9</ID>
    		<Name>새미누리</Name>
    		<Dialogue>물자를 수송해줄 인력들을 구한다고 했어</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>10</ID>
    		<Name>새미누리</Name>
    		<Dialogue>우리가 거기서 일하는 건 어때?</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>11</ID>
    		<Name>새미누리</Name>
    		<Dialogue>우주함선 비행사가 되는거야! 우리의 오랜 꿈이였잖아!</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>12</ID>
    		<Name>새미누리</Name>
    		<Dialogue>게다가 유로파에서 우주함선을 무상 제공해준다고 들었어</Dialogue>
    	</Dream9>
    	<Dream9>
    		<ID>13</ID>
    		<Name>해미누리</Name>
    		<Dialogue>좋은 생각인데? 당장 유로파로 떠나자!</Dialogue>
    	</Dream9>
    
    	<!--10번째-->
    	<Dream10>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 8353일</Dialogue>
    	</Dream10>
    	<Dream10>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성중궤도 우주항구</Dialogue>
    	</Dream10>
    	<Dream10>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리와 해미누리는 부푼 꿈을 안고 항구에서 탑승준비를 했다</Dialogue>
    	</Dream10>
    	<Dream10>
    		<ID>4</ID>
    		<Name>해미누리</Name>
    		<Dialogue>앞으로 어떤 일이 펼쳐지게 될까?</Dialogue>
    	</Dream10>	
    	<Dream10>
    		<ID>5</ID>
    		<Name>새미누리</Name>
    		<Dialogue>이제 이곳은 추억 속의 행성이 되겠네</Dialogue>
    	</Dream10>
    	<Dream10>
    		<ID>6</ID>
    		<Name>해미누리</Name>
    		<Dialogue>자, 이제 슬슬 탑승할까?</Dialogue>
    	</Dream10>
    	<Dream10>
    		<ID>7</ID>
    		<Name>새미누리</Name>
    		<Dialogue>그래, 가자!</Dialogue>
    	</Dream10>
    	
    	<!--11번째-->
    	<Dream11>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 8355일</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>금성에서 유로파로 가는 우주함선 안, 세레스 스윙바이 준비 중</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리와 해미누리는 식사를 하고 있다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>4</ID>
    		<Name>새미누리</Name>
    		<Dialogue>창 밖을 봐, 별들이 수놓아져 있어</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>5</ID>
    		<Name>해미누리</Name>
    		<Dialogue>진짜 많다, 근데 별들은 왜 하얀색 밖에 없어?</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>6</ID>
    		<Name>새미누리</Name>
    		<Dialogue>별들이 너무 밝아서 그래, 별이 존재하는 곳 까지 가보면 각각 별들의 색이 있어</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>7</ID>
    		<Name>해미누리</Name>
    		<Dialogue>헤헤 그렇구나, 그럼 저 별들에 사는 사람들은 태양의 색을 궁금해 할까?</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>8</ID>
    		<Name>새미누리</Name>
    		<Dialogue>재미있는 생각이네, 앞으로도 우리 이렇게 행복하게 살았으면 좋겠어</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>9</ID>
    		<Name></Name>
    		<Dialogue>둘은 식사를 마치고 함선 가운데의 큰 정원을 산책했다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>10</ID>
    		<Name></Name>
    		<Dialogue>그 순간이 너무 평화로워서 새미누리는 시간을 멈추고 싶었다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>11</ID>
    		<Name></Name>
    		<Dialogue>그러나...</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>12</ID>
    		<Name>해미누리</Name>
    		<Dialogue>악!</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>13</ID>
    		<Name></Name>
    		<Dialogue>공원의 장식물들이 덜덜덜 떨리더니 조명들이 꺼지기 시작했다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>14</ID>
    		<Name>새미누리</Name>
    		<Dialogue>지진인가..?</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>15</ID>
    		<Name></Name>
    		<Dialogue>그때 긴급방송이 울려왔다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>16</ID>
    		<Name></Name>
    		<Dialogue>우주해적이 침입해 왔으니, 즉시 대피선으로 이동하라고</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>17</ID>
    		<Name></Name>
    		<Dialogue>하지만 어디로 대피해야할지 감이 안온다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>18</ID>
    		<Name></Name>
    		<Dialogue>게다가 곳곳에서 연기가 피어올라 사방이 자욱해졌다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>19</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 목 터져라 해미누리를 찾아 다니다 본체의 조정실에 다다랐다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>20</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 구조선으로 가는 대신 우주선을 직접 조종하기로 했다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>21</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 남아있는 연료를 확인했다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>22</ID>
    		<Name></Name>
    		<Dialogue>유로파까지 다시 추진할 연료는 없을 꺼 같고, 우주해적을 막아줄 세레스로 간다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>23</ID>
    		<Name></Name>
    		<Dialogue>뒤쪽 엔진을 끄고 앞쪽엔진을 켜서 세레스로 향하는 궤도를 만든다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>24</ID>
    		<Name></Name>
    		<Dialogue>우주해적이 따라온다면 세레스의 방위체가 우주함선을 저격할 것이다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>25</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 조종바를 잡고 속도를 감축하고 다시 올렸다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>26</ID>
    		<Name></Name>
    		<Dialogue>실제로 운전해 본 건 처음이였지만 성공적이였다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>27</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 무사히 세레스의 우주정거장에 도킹하였다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>28</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 게이트를 통과하자마자 쓰러져 병원으로 실려갔다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>29</ID>
    		<Name></Name>
    		<Dialogue>이후 새미누리는 해당 사건에 조사를 받았다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>30</ID>
    		<Name></Name>
    		<Dialogue>다른사람의 함선을 빼돌려 무단으로 조종한것은 처벌 받지 않았지만, 유로파로 보내주지 못한다고 한다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>31</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 울고 싶었다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>32</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 창문너머로 분해되는 우주선을 멍하니 바라봤다</Dialogue>
    	</Dream11>
    	<Dream11>
    		<ID>33</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 유로파로 갈 날을 기다리며, 셋방을 구하고 일자리를 구했다</Dialogue>
    	</Dream11>
    	
    	<!--12번째-->
    	<Dream12>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리가 태어난지 100000일</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>세레스 고궤도 우주거주구 4A-28B</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 100000일 째 날을 기념도 못하고 있다</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>새미누리는	배가고파 어지럽다</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>점점 기억이 흐릿해져간다</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>그때였다...</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>7</ID>
    		<Name></Name>
    		<Dialogue>피를 팔아 돈을 벌 수 있다는 소식을 들었을 때,</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>8</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 피를 뽑으러 혈액관리소로 갔다</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>9</ID>
    		<Name></Name>
    		<Dialogue>그 뒤 바로 새미누리의 통장에 5000크레딧이 들어왔다</Dialogue>
    	</Dream12>
    	<Dream12>
    		<ID>10</ID>
    		<Name></Name>
    		<Dialogue>그게 이 이야기의 시작일 것이다</Dialogue>
    	</Dream12>
    	<DreamEnd>
    		<ID></ID>
    		<Name></Name>
    		<Dialogue>이제 새미누리는 더 이상 꿀 꿈이 없다</Dialogue>
    	</DreamEnd>
    	
    	<!--배드엔딩-->
    	<!--HP-->
    	<DeadEnding_HP>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 점점 몸이 허약해진 나머지 눈을 감았다</Dialogue>
    	</DeadEnding_HP>
    	<DeadEnding_HP>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>아무도 그녀를 추모하지 않았고,</Dialogue>
    	</DeadEnding_HP>
    	<DeadEnding_HP>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>세레스가 7번 자전한 뒤에 핵융합으로 우주먼지가 되어 사라졌다</Dialogue>
    	</DeadEnding_HP>
    	<DeadEnding_HP>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>그녀가 컴퓨터에 적어둔 여러 망상들은 유언이 되어 유로파로 보내지게 되었다</Dialogue>
    	</DeadEnding_HP>
    	<DeadEnding_HP>
    		<ID>5</ID>
    		<Name></Name>
    		<Dialogue>아마 유로파에 살고 있는 누군가가 받아갈 것 같다</Dialogue>
    	</DeadEnding_HP>
    	<DeadEnding_HP>
    		<ID>6</ID>
    		<Name></Name>
    		<Dialogue>-끝-</Dialogue>
    	</DeadEnding_HP>
    	
    	<!--Blood-->
    	<DeadEnding_Blood>
    		<ID>1</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 머리가 점점 어지러워졌다</Dialogue>
    	</DeadEnding_Blood>	
    	<DeadEnding_Blood>
    		<ID>2</ID>
    		<Name></Name>
    		<Dialogue>돈 욕심에 무리하게 피를 뽑다가 일어난 일이다</Dialogue>
    	</DeadEnding_Blood>
    	<DeadEnding_Blood>
    		<ID>3</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 천천히 눈을 감았다</Dialogue>
    	</DeadEnding_Blood>
    	<DeadEnding_Blood>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>-끝-</Dialogue>
    	</DeadEnding_Blood>
    	
    	<!--Hunger-->
    	<DeadEnding_Hunger>
    		<ID>1</ID>
    		<Name>새미누리</Name>
    		<Dialogue>아... 배고파...</Dialogue>
    	</DeadEnding_Hunger>
    	<DeadEnding_Hunger>
    		<ID>2</ID>
    		<Name>새미누리</Name>
    		<Dialogue>해미는 잘 살고 있으려나...</Dialogue>
    	</DeadEnding_Hunger>
    	<DeadEnding_Hunger>
    		<ID>3</ID>
    		<Name>새미누리</Name>
    		<Dialogue>나... 잘 살아 온걸까..?</Dialogue>
    	</DeadEnding_Hunger>
    	<DeadEnding_Hunger>
    		<ID>4</ID>
    		<Name></Name>
    		<Dialogue>새미누리는 천천히 눈을 감았다</Dialogue>
    	</DeadEnding_Hunger>
    </dataroot>

⬆필요한 대사를 xml 파일로 정리
불러오고 싶은 상황을 이름을 붙여 묶어 논다

  • DialogueShow.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Xml;
    using UnityEngine.UI;
    
    [System.Serializable]
    public class StringSprite : SerializableDictionary<string, Sprite> { }
    
    public class XML_Parse : MonoBehaviour
    {
        int _DialogueCount = 0; //받아오는 카운트
        Dialogue dialogue;      
        
        //0: 해미누리
        //1: 새미누리
        [SerializeField] 
        Sprite[] characterImgs;
       
    
        void Awake()
        {
          
        }
    
        public Dialogue LoadXML(string _storyFile)
        {
            TextAsset txtAsset = (TextAsset)Resources.Load("XML/Dialogue");
            _DialogueCount = -1;
    
            XmlDocument xmlDoc = new XmlDocument();
    
            xmlDoc.LoadXml(txtAsset.text);
            XmlNodeList all_nodes = xmlDoc.SelectNodes("dataroot/" + _storyFile);
    
            dialogue = new Dialogue(new string[all_nodes.Count], new string[all_nodes.Count],new Sprite[all_nodes.Count]);
    
            dialogue.sentences = new string[all_nodes.Count];
           
    
            foreach (XmlNode node in all_nodes)
            {
                dialogue.sentences[++_DialogueCount] = node.SelectSingleNode("Dialogue").InnerText;
                SetName(node);
                SetImage(node);
            }
    
            return dialogue;
        }
    
        private void SetName(XmlNode node)
        {
            var name = node.SelectSingleNode("Name").InnerText;
            
            dialogue.names[_DialogueCount] = name;
        }
    
        private void SetImage(XmlNode node)
        {
            var name = node.SelectSingleNode("Name").InnerText;
            switch (name)
            {
                case "새미누리":
                    dialogue.img[_DialogueCount] = characterImgs[0];
                    break;
                case "해미누리":
                    dialogue.img[_DialogueCount] = characterImgs[1];
                    break;
    
                default:
                    dialogue.img[_DialogueCount] = null;
                    break;
            }
    
        }
    }

⬆아까 말했던 xml 대사의 이름에 접근해서 출력한다


처음으로 xml 파일을 유니티에서 사용해 보았다

엑셀이나 Json 파일로 시도해봤지만 게임 특성 상 특정 상황에서 나오는 대사들이 정해져 있고, 서로 다른 캐릭터들이 주고 받는 대사가 많았기 때문에 xml 파일이 가장 유용했다

선배한테 코드 설명을 듣고 단순히 대사나 이름뿐 아니라 캐릭터의 이미지나 대사들이 나오는 애니메이션 등 여러 기능을 추가하였다

서버 연결

  • 서버 코드
    const express = require('express');
    const passport = require('passport');
    const session = require('express-session')
    const MongoClient = require('mongodb').MongoClient;
    const bodyparser = require('body-parser');
    const app = express();
    
    app.set('view engine','ejs');
    app.use(express.urlencoded({extended: true})) 
    app.use(session(
        {
            secret:'Mysecret', //쿠키에 서명을 추가하는 옵션
            resave: false, //모든 request마다 기존에 있던 session이 변경사항이 없어도 다시 저장할지 설정하는 옵션
            saveUninitialized: true //세선에 저장할게 없더라도 처음부터 세션을 설정할것인가 결정하는 옵션
        }));
    
    let db;
    let id;
    let pw;
    
    MongoClient.connect('mongodb+srv://ksg:kimsunggil2005!@cluster0.u4ppd.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', { useUnifiedTopology: true }, function (에러, client) {
        if (에러) return console.log(에러)
        db = client.db('todologin');
    
        //     db.collection('login').insertOne( {이름 : 'John', _id : 100} , function(에러, 결과){
        //     console.log('저장완료'); 
        // });
        const ip = '192.168.0.109'
        app.listen(3000, ip, function () {
            console.log('서버 가동중');
        });
    });
    app.get('/',(req,res)=>{
        res.send('서버');
    })
    app.get('/sign_up',(req,res)=>{ 
        res.render("sign_up.ejs")
    })
    
    app.get('/login',(req,res)=>{
        res.render('login.ejs');
    })
    
    app.post('/sign_up',(req,res)=>{
    
        id = req.body.id;
        pw = req.body.pw;
        console.log(req.body);
        console.log(id);
        console.log(pw);
    
        db.collection('login').insertOne( {id : req.body.id, pw : req.body.pw }, (err, result) => {
            console.log("저장완료");
            res.send('서버');
    
        })
    })
    
    app.post('/login',(req,res)=>{
    
       if(req.body.id === id){
           if(req.body.pw === pw){
               res.send("로그인 성공!!");
           }
       }
    })

⬆node.js 를 이용하여 성길 이가 로그인 서버를 구현했다

  • Server.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    using System.Data;
    using UnityEngine.Networking;
    
    public class Server : MonoBehaviour
    {   
        string url = "http://192.168.0.109:3000/";
    
        [SerializeField] InputField idInput;
        [SerializeField] InputField pwInput;
    
        [SerializeField] GameObject logInImg;
        [SerializeField] GameObject successImg;
        [SerializeField] Text successText;
        
    
        private string id;
        private string pw;
    
        void Start()
        {
        }
    
        public void Login()
        {
            url += "login";
            Input(idInput.text,pwInput.text);
            StartCoroutine(WebRequest(id,pw));
    
        }
    
        public void Sign_Up()
        {
            url += "sign_up";
            Input(idInput.text, pwInput.text);
            StartCoroutine(WebRequest(id,pw));
            
        }
    
        public void Input(string id, string pw)
        {
            this.id = id;
            this.pw = pw;
        }
        IEnumerator WebRequest(string id, string pw)
        {
            UnityWebRequest request = new UnityWebRequest();
    
            WWWForm form = new WWWForm();
            form.AddField("id", id);
            form.AddField("pw", pw);
    
            using (request = UnityWebRequest.Post(url, form))
            {
                yield return request.SendWebRequest();
    
                if (request.isNetworkError)
                {
                    successText.text = "실패 했습니다";
                    Debug.Log(request.error);
                }
                else
                {
                    successText.text = "성공했습니다";
                    Debug.Log("<post>" + request.downloadHandler.text + "</post>");
                }
                successImg.SetActive(true);
            }
    
            endRequest();
        }
    
        public void OnClick()
        {
            successImg.SetActive(false);
            logInImg.SetActive(false);
    
        }
    
        public void ShowOnClick()
        {
            logInImg.SetActive(true);
        }
    
        void endRequest()
        {
            url = "http://192.168.0.109:3000/";
        }
     }

⬆구글링과 선배들의 도움을 받아 서버의 기본 개념을 이해하고, 유니티와 연결했다


서버 연결은 엄청 어려울 줄 알았는데 선배의 도움으로 원리를 이해하니까 쉬웠다

구글에서 나온 서버코드와 내가 받은 서버코드가 달라, 먼저 원리를 이해하고 나의 프로젝트의 맞게 코드를 수정했다
지금 서버쪽에서 url을 고정할 수 없어서 서버와 플레이하는 사람의 와이파이가 같아야하고, 서버주소가 바뀌면 연결이 안된다는 단점이 있지만, 그래도 연결 했다는 사실에 의의를 두기로 했다

선택지 관리

선택지 관리는 이 프로젝트 에서 2번재로 중요했다

플레이어는 매번 5개의 선택지를 고를 수 있었는데 선택지마다 공통점과 차이점을 생각해보았다

결국, 장소 하나하나 마다 코드를 무작정 짜기 보단, 상속을 이용해서 체계적으로 관리 하기로 하였다

  • MovePlace.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class MovePlace : MonoBehaviour
    {
        public Player player => SystemManager.Instance.Player;
    
        public virtual void Move()
        {
            SystemManager.Instance.DialogueShow.SentanceCount = 0;
        }
    
        public virtual void GoOut()
        {
    
        }
    }

⬆모든 선택지의 원본이 되는 MovePlace.cs 이다

플레이어의 변수들을 가지고 있고, 선택을 했을 때 일어날 일들이 들어갈 함수와, 정해진 일들을 다 수행하고 메인화면으로 돌아갈때의 함수가 존재한다

한번 틀을 잡아두니까 5개의 선택지와 관련한 코드를 작성할 때 훨씬 효율적으로 코드를 짤 수 있었다

  • Park.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using TMPro;
    
    public class Park : MovePlace
    {
        [SerializeField]
        GameObject CardBar;
        [SerializeField]
        GameObject CardBtn;
    
        [SerializeField]
        TMP_Text[] numText;
    
        [SerializeField] AudioSource parkSound;
        [SerializeField] AudioSource cardSound;
    
        int[] nums;
    
        void Awake()
        {
            nums = new int[3] { 0,0,0};
    
        }
    
        void Start()
        {
            CardBar.SetActive(false);
            CardBtn.SetActive(false);
        }
    
        public override void Move()
        {
            base.Move();
            parkSound.Play();
            SystemManager.Instance.Bloodshop.isDreaming = false;
            CardBtn.SetActive(true);
            
        }
    
        public override void GoOut()
        {
            base.GoOut();
            parkSound.Stop();
            CardBtn.SetActive(false);
            CardBar.SetActive(false);
        }
    
        public void OnClick()
        {
            if (player.Money < 100)
            {
                SystemManager.Instance.DialogueShow.StartDialogue("NoMoney");
                return;
            }
    
            player.Money -= 100;
    
            CardBar.SetActive(true);
            for (int i = 0; i < numText.Length; i++)
            {
                cardSound.Play();
                nums[i] = Random.Range(1, 10);
                numText[i].text = nums[i].ToString();
            }
    
            //결과 출력
            GameResults();
    
            CardBtn.SetActive(false);   
        }
    
        void GameResults()
        {
            SystemManager.Instance.DialogueShow.SentanceCount = 0;
    
            //if문을 이용해서 결과를 출력
            if (nums[0] == nums[1] && nums[0] == nums[2])
            {
                SystemManager.Instance.DialogueShow.StartDialogue("Winning");
                player.Money += 9744;
            }
            else{
                SystemManager.Instance.DialogueShow.StartDialogue("Loseing");
            }
    
        }
    }
  • Bloodshop.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Bloodshop : MovePlace
    {
        public bool isBloodshop;
        public bool isDreaming;
    
        [SerializeField] AudioSource moveBloodSound;
        public override void Move()
        {
            base.Move();
            moveBloodSound.Play();
            isBloodshop = true;
            SystemManager.Instance.House.isHouse = false;
        }
        public override void GoOut()
        {
            base.GoOut();
            moveBloodSound.Stop();
        }
    
        public void BloodCheck()
        {
            if (player.Blood >= 500 && player.HP >= 3)
            {
                player.Blood -= 500;
                player.Money += 5000;
                player.HP -= 2;
                SystemManager.Instance.DialogueShow.StartDialogue("GoodBlood");
                
            }
            else
            {
                SystemManager.Instance.DialogueShow.StartDialogue("BadBlood");
            }
            isBloodshop = false;
            isDreaming = true;
        }
    
    }
  • Spaceport.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Spaceport : MovePlace
    {
        [SerializeField]
        GameObject buyBtn;
    
        [SerializeField] AudioSource spaceportSound;
    
        void Start()
        {
            buyBtn.SetActive(false);
        }
    
        public override void Move()
        {
            spaceportSound.Play();
            base.Move();
            SystemManager.Instance.Bloodshop.isDreaming = false;
            buyBtn.SetActive(true);
        }
    
        public override void GoOut()
        {
            base.GoOut();
            spaceportSound.Stop();
            buyBtn.SetActive(false);
        }
    
        public void OnClick()
        {
            if (player.Money < 35000000)
            {
                SystemManager.Instance.DialogueShow.StartDialogue("NoMoney");
                return;
            }
            else
            {
                buyBtn.SetActive(false);
                //해피엔딩
                SystemManager.Instance.Ending.EndingDialogue("HappyEnding");
    
            }
        }
    
    }
  • House.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class House : MovePlace
    {
    
        public bool isHouse;
    
        [SerializeField]
        AudioSource houseSound;
        [SerializeField] AudioSource dreamSound;
    
        public override void Move()
        {
            isHouse = true;
            houseSound.Play();
            base.Move();
            Sleep();
        }
    
        public override void GoOut()
        {
            houseSound.Stop();
            dreamSound.Stop();
            base.GoOut();
        }
    
        //잠을 자고 체력 회복
        void Sleep()
        {
            if (player.Hunger >= 5)
                player.HP += 3;
            else
                player.HP += 1;
    
            player.Blood += 17;
            player.Hunger -= 2;
        }
    
        //꿈을 꾼다
        public void DreamCheck()
        {
            houseSound.Stop();
            player.Dream++;
            SystemManager.Instance.DialogueTrigger.ChangeBG(5);
            dreamSound.Play();
            if (player.Dream > 20)
            {
                SystemManager.Instance.DialogueShow.StartDialogue("DreamEnd");
            }
            SystemManager.Instance.DialogueShow.StartDialogue("Dream" + SystemManager.Instance.Player.Dream);
            isHouse = false;
        }
    }
  • Market.cs
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Market : MovePlace
    {
        [SerializeField]
        GameObject productsBar;
    
        [SerializeField] AudioSource marketSound;
    
        void Start()
        {
            //게임을 시작할 때는 상품 바 가리기
            productsBar.SetActive(false);
        }
        public override void Move()
        {
            base.Move();
            marketSound.Play();
            SystemManager.Instance.Bloodshop.isDreaming = false;
            productsBar.SetActive(true);
        }
        
        public override void GoOut()
        {
            productsBar.SetActive(false);
            marketSound.Stop();
        }
    
    }
    MovePlace.cs

MovePlace.cs 를 부모로 둔 선택지 코드들이다

결론

이번 프로젝트는 주변 사람들의 도움과 나의 열쩡으로 만들어진 귀중한 놈이다

텍스트 기반의 게임이라 단순할 줄 알았는데 생각보다 신경써야 할껏도 많고 자칫 코드가 복잡해 질 수 도 있었다 그리고 실제로 그랬다

그래도 작품을 포기하지 않고 주어진 시간 이내에 구현 가능하게 만들었다는 것에 난 이미 뿌듯하다
유휴/

profile
언젠간 바다로 갈거야!🐋

0개의 댓글