본문 바로가기

C#/Project Portfolio

우주의나라

< 시나리오 > 

 

< 시연 영상 >

우주의나라

 

넥슨사 바람의나라의 데이터를 응용하여 간단한 프로그램 작업을 진행해 보았다

구현한 시스템은 로그인, 상태창 확인, 인상점 및 NPC 구현, 인벤토리 및 장착 시 옵션 반영 등등이 있다.

 

[ 작업을 진행하면서 어려웠던 점 및 해결 과정 ]

ⓐ 로그인 시스템

일단 로그인 시스템을 만들 때 전반적인 베이스로 반복문을 사용해야 겠다고 느꼈다.

그 이유는 아이디 혹은 비밀번호가 일치하지 않으면 다시 접속하도록 유도해야 했기 때문이다.

그래서 채택한 문법이 While문이었고 이 것은 조건식에 부합할 때 까지 무한루프로 돌릴  수 있기 때문이다. 

while의 조건식으로 플레이어가 입력한 아이디값 = 패스워드값 을 설정하고 진행해보려 했지만 

생각해보니 아이디와 비밀번호를 입력하라는 문구를 출력해야 하는것을 깜빡했다.

결국 While을 아이디 및 비밀번호 문구를 출력용으로 하고 ( 입력값이 틀리면 반복시켜서 발동 시켜야 하므로 )

그 안에 if문을 넣어서 입력한 값의 조건에 따라 실행하도록 설계하였다.

문제는 While의 조건식으로 그럼 뭘 넣어야 할지 고민이 생긴 것이다.

고민 끝에 새로운 변수를 넣기로 하였고 자료형 bool을 활용하여 true값과 false값을 판별하는 것으로 기준의 잣대를 세움으로서 완성시켰다.

 

ⓑ 소비성 아이템을 사용하는 경우

도토리, 녹용, 노란비서와 같은 소비성 아이템을 사용하고나서 다시 인벤토리를 확인해 보면 소지 갯수에 변함이 없는 문제를 발견했었다.

eat=1; 으로 설정하였던 것으로 아주 기본적인 실수를 하였다. 이 부분을 찾는데 생각보다 긴 시간을 쏟았고 상기의 문제를 해결하려는 과정과 그 끝에 도달 했을 때의 감정이 생생하므로 어이가 없어서 기록하였다. 코딩하는것이 아직 한참 서툴다는 것을 느낀 시간이었다.

 

ⓒ 같은 부위의 아이템이 중복되서 착용되는 현상

이 부분은 사실 크게 어렵지는 않았지만 기록해놓으면 좋을 것 같아서 작성한다.

로그인 부분에서 Bool을 활용하는 쪽으로 설계하였다.

무기를 예로 들면 사두목검을 착용했을땐 다른 무기들의 Bool값을

전부 false화 시키고 착용할 무기만 true로 설정하도록 로직을 작성하면 된다.

 

ⓓ 전환

기존상태 : 로딩씬 -> 대장간 -> 부여성비서 사용 -> 주막 -> 장소는 주막인데 왜 선택 메뉴는 대장간 메뉴가 나옴
희망사항 : 로딩씬 -> 대장간 -> 부여성비서 사용 -> 주막 -> 게임씬에서 npc클릭을 대장간으로 이동하고 싶음

고민 끝에 게임씬을 복사하여 또 하나의 게임씬2를 생성하여 문제를 개선하였다.

데이터를 공유하기 때문에 출력하는 부분에 있어서 심각한 오류는 없지만.. 번거로웠던 부분은 인벤토리에서 아이템을 장착하고 back을 타이핑 하면, 게임씬2가 아니라 게임씬1로 이동하는 부분 등을 수정해야만 했었다. 그 과정 속에서 인벤토리도 인벤토리2 형식으로 하나 더 만들어야 하는 등 손이 많이 갔다.

언젠간 정식 서비스를 하여 이와 같은 방법으로 운영하게 된다면 버그가 발견될 확률이 굉장히 높으므로 좋은방법이 아님은 분명하다. 이 부분은 앞으로 학습에 정진하여 더 좋은 방법을 찾을 수 있도록 해야만한다.

 

ⓔ 인벤토리 출력 관련

거의 대부분의 변수에 대한 초기값들은 로드씬에다 설정하였고, 로드씬에 있는 데이터들을 끌고와서 인벤토리에 배열로 활용했다. 그런데 배열에는 대장간에서 구매하게 될 아이템들도 포함되어 있기 때문에 아이템을 구매하지 않았을 때는 출력되지 않아야하고, 아이템은 구매한 것만 출력되도록 설계를 해야한다. 처음에 트라이 했을 때는 인벤토리창에 구매도 하지않은 대장간의 아이템들까지 포함하여 뜬 것이다....... 이 것을 해결하기 위해서 어느 부분을 건들여야할지 고민을 많이했다. 그러다가 인벤토리창임에 불구하고 되려 착용한 장비들만 출력되는 현상도 있었다. 생각 끝에서 초기값을 설정한 로드씬을 살핀다음에 대장간 아이템들을 null 시켜놓고 필요할때만 호출이 가능하도록 진행하였더니 순조로웠다.

 

ⓕ 제일 심각한 부분

아직 제대로 학습하지는 못했지만 클래스라는 것을 활용하면 피로도가 반감될 것 같다.

하나의 스크립트만으로 1400줄 정도를 코딩하였는데 살면서 이렇게 드래그 많이 해본 적은 처음이다. 너무 어지러웠고 피곤하다......

그리고 배열만 활용했을 뿐 리스트와 같은 컬렉션기능을 하나도 사용하지 않았다.

클래스와 컬렉션을 충분히 학습하고 적용한다면 인벤토리 같은 작업들을 간편화 시킬수 있을 것 같다.

'C# > Project Portfolio' 카테고리의 다른 글

OceanStory  (0) 2024.05.08