더북(TheBook)

10.4 몬스터 NPC 처리의 분산 처리

 

 

온라인 게임을 개발하다 보면 몬스터 처리에서 성능 문제가 발생하기도 합니다. 이를 알아봅시다.

보통 서버에서 하는 몬스터 관련 처리는 다음과 같습니다.

• 일정 시간마다 몬스터의 움직임을 델타 타임(delta time, 1/30초 혹은 1/10초)만큼 시뮬레이션(위치 이동, 모션 변화)합니다.

• 일정 조건(시간)마다 몬스터의 움직임 결과를 가시자 클라이언트2에 보냅니다.

• 플레이어가 몬스터와 상호 작용(공격)할 경우, 이에 대한 연산을 처리한 후 몬스터 및 플레이어 상태를 갱신(몬스터 사망 또는 플레이어 보상)합니다.

한편 성능상 고려해야 할 것들도 있습니다.

• 보통 몬스터 수가 플레이어 수보다 훨씬 많습니다. 게임 플레이어가 사냥할 수 있는 몬스터가 주변에 많아야 게임도 재미있기 때문입니다.

• 몬스터 움직임을 위한 연산량이 많이 필요할 수도 있습니다. 예를 들어 몬스터가 플레이어를 추격하려면 길찾기 알고리즘을 연산해야 할 수 있습니다. 길찾기 알고리즘은 A* 알고리즘 등을 쓰기에 연산량이 많이 필요합니다.

• 몬스터의 연산 로직에는 게임 기획자의 아이디어가 많이 들어가기 때문에 프로그램 구조가 복잡해지거나 버그가 있을 수 있습니다.

 

2 가시자 클라이언트란 몬스터 주변에 있는 플레이어들을 의미합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.