테스트 영상
지금까지 약 4개월간 제작한 게임에 대한 테스트 영상이다.
https://youtu.be/Ayq_w8Nptmc?feature=shared
유저는 약 1000명 까지는 무리 없이 동작하는 모습을 보였고, 아직 전투에 대한 긴박함은 없지만 RPG 게임에서의 필수적인 요소들은 전부 구현하고 최적화해봤다고 생각한다.
얻은 것
클라이언트 개발자로 공부를 해오면서 클라이언트를 잘 이해하기 위해서라도 서버에 대한 지식이 필수적이라는 생각이 들어, 온라인 게임을 직접 제작해 보았다.
이 과정에서 단순한 기술 시연을 위한 기능보다 네트워크, 운영체제, 데이터베이스 등 다양한 컴퓨터 과학(CS) 지식이 매우 중요하다는 것을 깨달았다.
개발은 데스크탑과 노트북을 번갈아 가며 진행했는데, 특히 노트북에서 로컬 서버와 유니티를 동시에 구동할 때 메모리 부족 문제를 많이 겪었다. 이로 인해 최적화 작업에 많은 시간을 할애하게 되었다.
최적화를 위해,
서버에서는 브로드캐스트를 모든 플레이어에게 데이터를 전송하는 대신, 맵을 Zone 단위로 나누고 같은 Zone에 있는 플레이어 중 Vision Size에 해당하는 플레이어에게만 브로드캐스트를 진행하는 방식을 채택했다.
클라이언트에서는 자주 사용하는 오브젝트들을 로딩씬에서 PoolManager를 통해 풀링 시스템으로 구현해 최적화를 진행했다. 또한, 풀링된 오브젝트가 너무 많이 쌓이지 않도록 중간중간 메모리를 정리하는 작업도 추가했다.
클라이언트 개발은 여러 경험이 있어 비교적 수월했지만, 서버 개발은 처음이라 많은 어려움을 겪었다. 특히 아이템을 획득하거나 판매할 때 데드락이 발생해 정상적으로 작동하지 않는 문제가 있었다. 이 문제를 해결하기 위해 락을 걸어야 했지만, 이는 동시 접속자가 많을 때 서버와 클라이언트 간의 딜레이를 초래할 수 있어 다른 방식을 채택했다.
처음부터 쓰레드를 DB 저장용, 메인 쓰레드, 전투 쓰레드 등으로 분리하고, Job이라는 개념을 도입해 각 쓰레드가 자신의 작업을 순차적으로 처리하도록 하여 락을 걸지 않고 문제를 해결했다.
이번 게임 포트폴리오 제작을 통해 기초적인 지식의 중요성을 다시 한 번 깨달았으며, 클라이언트와 서버 개발 모두에서 어느 정도의 상호 지식이 필요하다는 것을 인식하게 되었다.
'Unity > 온라인 RPG' 카테고리의 다른 글
[Unity 3D] 유저간 채팅 시스템 구현하기 (0) | 2024.08.14 |
---|---|
[Unity 3D] 퀘스트 DB에 저장하기 (0) | 2024.08.14 |
[Unity 3D] 퀘스트 시스템 구현하기 (1) | 2024.08.06 |
[Unity 3D] 각종 사운드 추가 (0) | 2024.07.29 |
[Unity 3D] 보스 드래곤의 패턴 만들기 (0) | 2024.07.29 |