인프런 커뮤니티 질문&답변

rush님의 프로필 이미지
rush

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

A* 구현 Part2

길찾기질문입니다.

작성

·

348

1

안녕하세요 알고리즘 강의를 다듣고 질문을 드립니다.

이 강의의 방향성이 mmorpg니깐 차후에 관련된 강좌가 올라오겠지만 아직 강의 업데이트 할날이 먼거 같아 미리 질문을 드립니다. a* 길찾기가 많이 쓰이는 알고리즘인건 잘 알고 있는데 mmo같이 광활한 맵(노드수가 엄청 많겠죠)에서는 부하가 상당할 것으로 보입니다. 이부분을 어떤식으로 해결 하는지요? 짧은 거리일 경우는 검사범위를 제한할거 같은데 만약 아주 먼거리를 자동이동 하게 하면 그 광할한 경로를 어떻게 검사를 할까요?

답변 2

3

Rookiss님의 프로필 이미지
Rookiss
지식공유자

안녕하세요,

우선 길찾기를 할 대상은 크게 플레이어와 몬스터(NPC, 펫 포함)로 구분할 수가 있습니다.

몬스터의 경우 서버에서 조작하는 개체들이니 길찾기 AI 또한 서버에서 연산을 해야 하는데,

대부분 몬스터들은 어마어마하게 먼 거리를 이동하지는 않기 때문에 depth 제한을 두는 방식으로 부하를 해결할 수 있습니다.

플레이어의 경우 각자 유저의 PC에서 조작하는 개체이기 때문에,

서버에서 굳이 플레이어의 길찾기를 대신 해주지 않고 클라에서 길찾기 연산을 담당하게 됩니다.

실제로 클라가 서버에 전송하는 것은 전체 경로가 아니라,

다음에 이동할 '근시적인' 목적 좌표만 주기적으로 서버에 전송하게 됩니다.

게임에 따라서 자동 이동을 지원하는 경우가 있는데 (특히 오픈필드 모바일 mmo에서 그렇죠)

이 때도 좌표 계산을 서버에 위임하지 않고 클라에서 직접하게 됩니다.

그러나 말씀주신대로 광활한 경로를 노드 기반으로 하나씩 계산하게 되면

길찾기를 할때마다 클라에 렉 걸리는 현상이 일어나겠죠.

따라서 아주 먼 거리 자동이동이 들어가는 게임 (마을 간 자동 이동이라거나)의 경우,

모든 경로를 한 번에 계산하지 않고 다양한 최적화가 들어가게 됩니다.

예를 들면 [검은사X] 같은 게임에서 다른 마을로 길찾기를 찍어놓으면,

일단 큰 길로 이동을 한 다음, 그 큰 길의 경로를 따라가는 것을 볼 수 있는데요.

큰 길로 이동하는 부분은 길찾기를 이용한 다음,

큰 길에서 찍힌 좌표대로 이동을 하는 방식이라고 유추할 수 있겠습니다.

따라서 아주 먼거리를 자동이동 할 때는 실제 최단 거리로 이동하는 경우는 거의 없다고 보면 됩니다.

[러프하게 찍어놓은 좌표로 이동하고 특정 범위 이내가 되면 세부적인 길찾기를 하는] 등의 다양한 방법이 있으며,

사실 정해진 정답은 없다고 보시면 되겠습니다.

참고로 이런 자동 길찾기와 관련된 부분은 프로젝트 초반에 한 명이 담당해서 몇 달 동안 그것만 파는 경우가 많습니다.

이번 시리즈에서의 최종 목표는 바람의 나라 스타일의 간단한 2D 로그라이크 MMO이기 때문에

특별히 그런 장거리 길찾기에 관련된 내용은 다루지 않을 예정입니다.

감사합니다.

0

rush님의 프로필 이미지
rush
질문자

친철히 설명해 주셔서 정말 감사드립니다. 많은 팁을 얻을수 있었습니다. 

rush님의 프로필 이미지
rush

작성한 질문수

질문하기