한달 감상평 : 개인적으로 한숨 돌릴 수 있었던 한달 이었다. 추웠던 날씨가 많이 따뜻해지고, 어렵고 많은 업무량으로 힘들었던 기간이 지나, 충분히 흥미롭고 재밌는 업무를 하고 있어서 만족도가 상당히 높았다.
Work
- 미니게임
- 게임모드 시스템(최고기록 모드, 스토리 모드)
- 매칭 시스템
-미니게임
새로운 미니게임 개발을 하게 되었다. 폴 가이즈를 모티브로 한 레이스 게임인데, 래그돌(rag doll)이라는 시체처럼 늘어지는 캐릭터 효과를 포함하는 기획이 있었고, 이를 구현하게 되었다.
이를 구현하면 어려웠던 점은 물리 충돌을 할때만, 래그돌을 사용하게 되며, 래그돌의 충격량은 항상 일정하게 들어가야했다. 그러나 모체의 충격량과 래그돌의 충격량이 동시에 들어가게 되었고, rigidbody의 속력값 조절을 해도 래그돌이 튕겨나가는 현상이 발생했다. 래그돌을 위한 오브젝트와 일반 플레이어 오브젝트 둘을 나누어서 가져가서 해결할수 있었지만, 우리 프로젝트의 플레이어 오브젝트 구조상 이는 적용할수 없는 해결법이었다. 결국, 충돌했을 때 모체의 rigidbody를 kinematic으로 설정해줌으로서 해결하였다.
-미니게임 시스템
게임의 모드를 추가/구분 하는 시스템을 개발하게 되었다. 기존에는 스토리 모드 하나만 존재하였고, 어떤 게임의 달성 조건을 달성하면 게임이 완료가 되는 단순한 구조였다. 얼마전에 작업한 최고기록 모드로 몇가지 게임을 바꾸면서, 개별 게임을 진행할때와 스토리 모드로 진행 할때는 모드를 구분하는것이 좋겠다고 기획이 나왔다. 그래서 기존의 미니게임 로직 부분에서 모드에 따라 다르게 동작해야만 했다. 그래서 로직을 담당하는 class 혹은 함수를 모드에 따라 DI 시켜주려했고, 이과정에서 vcontainer를 알게 되었다. 최종적으로 다른 개발자들이 vcontainer에대해 학습을 해야했고, 굳이 사용할 필요가 있을까 하여 사용하지 않았고, 간단하게 우리 프로젝트에서 의미있게 사용할 부분만 발췌하여 커스터마이즈하여 사용했다. 모든 미니게임에도 적용 가능해야 했기에, 추상적으로 짰으며, 각 미니게임 별로 필요한 로직이 달랐기에, mode라는 클래스에 필요한 로직들을 담아두도록 하였다.
그래서 사용하는 방식이 director.Finishgame() -> Mode.Finishgame() 으로 간단하게 바꾸어 주었다. 더불어, 기존 로직에 변경점이 없어서 안정성 또한 보장이 되었다.
-매칭 시스템
랜덤 유저와 매칭으로 연결하여 게임을 시작할수 있는 기능을 개발하게 되었다. 기존에 서버리스트를 불러와서 목록으로 확인 할수 있는 기능이 구현을 해놔서, 비교적 간단하게 구현할 수가 있었다.
다만, 중간에 고려해야할 경우의 수가 정말 많았고, 이를 해결하려 하다보니 하드코딩을 하게 되었다.
가독성의 어느정도 문제를 가지고 있기는 하지만, 얼마전 테스트 플레이를 해봤을 때 정상적으로 작동하는 것을 확인하였다. 아직 해결해야할 문제로는 steam서버로 request를 보냈을 때, response가 늦거나 소실되는 경우가 있다는 것이다. 이를 자연스럽게 해결할 방안은 고민중에 있다.
personal
- 사이드 프로젝트
- 스테이지 사이클 개발 (진행중)
- 재화시스템 (기획중)
이제 기능을 개발할때 기획과 개발을 동시에 진행하기로 하였다.
-스테이지 사이클 개발
스테이지를 올라가면서 중간에 보스도 나오고, 쉼터 같은 스테이지가 나오며, 캐릭터가 죽었을 때 마지막 세이빙지점으로 보내는 기능을 개발하게 되었다. 스테이지가 올라감과 동시에 스폰되는 맵의 종류를 조건에 따라 스폰하여주었다. 스테이지 레벨에 따라 몬스터의 레벨링을 해주고, 캐릭터의 세이빙 포인트 저장 포인트 등을 알고 있는 contextmanager를 추가해줄 예정이다.
-재화시스템
현재 재화 시스템이 없어서 개발 예정이다. 휘발성과 비휘발성으로 나누어서 기획 할 예정이다
책을 읽으며 기억에 남았던 문구
"더 낳은것을 욕망하는 것도 노력이 필요하다."
"세월에 노력을 묻는 시기가 필요하다."
읽은 책
자유론
파우스트
읽을 책
아비투스
사피엔스