오늘은 개인 일정이 있다 보니 직접적인 버그 픽스의 일은 거의 하지 않았고, 카드 프리팹 UI 수정 작업 정도를 했다.
그리고 게임 내 버그 픽스 작업보다는 다른 쪽으로 작업을 했는데, 팀장님이 월요일 발표를 해야 하므로 발표 준비를 위한 도움을 주었다.
크게 다음 두 가지 작업을 도왔다.
딱히 문제나 해결과정에 대해 얘기할 건 없지만, 팀장님의 PPT 작업을 도우면서 발표 내용을 정리하는 과정에서 팀원이 한 작업물에 대한 고찰을 해 보고자 한다.
구체적으로 한 업무에 대해 설명하자면, 팀원 한 분이 자신의 작업물에 관해 다루고 싶은 내용을 다음과 같이 정리했었는데, 빠진 내용도 있고 발표 내용으로 전달해야 할 내용이 정리가 안 되서 해당 내용을 내가 직접 코드 분석을 하고 정리해보았다.
원본으로 보내줬던 내용은 다음과 같았다.
이 분의 경우 팀원들 중에서 사실 제일 코딩을 잘한다고 말해도 손색이 없을 정도로 실력자이신 분이어서, 내가 직접 코드를 분석하고 어떤 구조로 짰는지 확인해보았다.
결론은 아래와 같이 정리할 수 있었다.
(팀원의 작업물을 보고 내가 직접 짜 본 다이어그램)
게임의 방어 시스템은 플레이어가 취할 수 있는 행동 중 하나인 방어에 관한 기능을 다루는 시스템입니다. 이는 필요에 따라 기능의 추가 및 확장성이 중요시 되는 영역이므로, 해당 시스템의 설계에 유연함과 확장성을 중심으로 설계하였습니다.
따라서, 아래와 같은 설계 방법으로 설계하였습니다.
2.1) 스크립터블 오브젝트를 이용한 스킬의 데이터 및 로직의 분리
방어 스킬은 방어 스킬 자체의 데이터 부분과 작동 로직을 분리하여 설계하였습니다.
방어 스킬의 데이터 부분은 스크립터블 오브젝트로 관리하며, DefenceSkillDataSO 추상클래스를 상속한 스크립터블 오브젝트로 각각의 데이터를 구성합니다.
해당 데이터를 바탕으로 각각의 스킬의 작동 로직을 (스킬명)Effect라는 컴포넌트로 행동방식을 정의합니다.
2.2) 스킬의 캡슐화 및 데이터베이스를 기반으로 한 총체적인 관리
이와 같이 각각의 스킬을 정의한 다음, 해당 스킬의 목록을 저장하는 DefenceSkillDatabaseSO에 각각의 스킬 정보를 저장합니다. 이와 같이 구성된 데이터베이스를 바탕으로 DefenceSkillManager에서 스킬의 동작을 실제로 실행하고 관리하는 역할을 합니다.
2.3) 오브젝트 풀의 적용
PhotonNetwork 기반으로 작동하는 오브젝트 풀의 구성을 통하여 DefenceSkillDataSO에서 Initialize 단계에서 각각의 스킬에 오브젝트 풀을 적용합니다.
3.1) 모듈성 - 스킬이 독립적으로 존재하여 관리가 용이하며, 스킬의 추가 및 삭제 등의 확장성에 용이합니다. 신규 스킬 추가 등도 스크립터블 오브젝트 및 로직을 추가하는 방식만으로도 간단하게 추가할 수 있습니다.
3.2) 유지보수성 - 중심이 되는 DefenceSkillDataSO와 로직, DefenceSkillManager만 잘 구성하면 유지보수가 용이할 것이라는 기대효과가 있습니다. 또한 스킬 각각의 디버깅 및 수정에 용이한 구조라고 할 수 있습니다.
이렇게 내용을 정리해 보니 정말 이 분의 코드가 깔끔하고 잘 만들어져 있는 것을 확인했다. 스크립터블 오브젝트를 활용한 방식에서도 감탄을 했고 코드의 내용이 어렵지도 않고 잘 짜여진 구조라는 것을 확실히 볼 수 있었다.
나중에 한 번 이 코드를 직접 뜯어보면서 연구해 보는 것도 좋은 경험이 될 것 같다는 생각을 했다.
모든 버그를 고쳤다고는 장담을 못하지만, 할 수 있는 만큼은 했다고 생각한다. 그래도 지금까지 한 결실이 맻어서 게임의 완성도 자체는 꽤 높게 나왔다고 생각한다. 이런저런 버그나 사고도 많기야 했지만, 이제 내일 발표까지 마무리하면 확실하게 프로젝트가 끝이 날 것이다.