해결된 질문
작성
·
212
0
안녕하세요!
강의를 보던 중 궁금한 점이 생겨 글을 남기게 되었습니다.
이번 강의에서 만드신 게임의 동작방식을 보면 플레이어가 셀단위로 이동을 하는걸 알 수 있는데요.
이렇게 셀단위로 이동할 경우 서버에서의 충돌체크나 AI의 길찾기를 모두 셀단위를 기준으로 하게 되어 간편하게 할 수 있는것 같습니다!
그런데 이런 방식이 아니라 Part#4에서 만드셨던것처럼 자유롭게 케릭터가 이동 가능한 경우, 서버에서의 충돌처리나 이동가능 체크, 길찾기는 어떤방식으로 하게 되나요?
가장 단순하게 생각하면 셀을 아주 미세하게 쪼개서 대량으로 만들고 케릭터의 크기만 키우는 방법이 있을것 같은데요. (셀 간의 간격이 좁으므로 셀단위 이동이라는 느낌이 안들게 되겠죠)
이렇게 할 경우 너무 많은 셀을 만들게 되어 메모리는 그렇다 쳐도 AI의 길찾기 속도 저하등 퍼포먼스 문제가 발생하여 일반적으로는 사용되지 않을것 같습니다.
그렇다면 Part#4와 같은 게임에서는 어떤 방식을 사용하여 처리하는 지가 궁금합니다. (충돌처리 방법, 서버 맵데이터를 뽑는 방법 등등..)
내용이 광범위 하다면 검색 키워드나 관련 정보의 URL이라도 부탁드리겠습니다.
감사합니다!
답변 2
1
와우나 테라같이 자유롭게 움직일 수 있는 MMO의 경우
유닛간 충돌 판정을 하지 않는 경우가 많습니다.
(미세하게 움직일 수 있는 게임에서 유닛간 충돌을 구현하는 경우를 본적이 없습니다.)
추가로 벽과 같이 정말 가면 안되는 지형이 있다면 클라에서 먼저 판정을 하고,
서버에서는 Voxel이라거나 추가 정보를 이용해 검증을 해주는 방식으로 많이 동작합니다.
혹은, 그냥 클라 판정을 믿고 이 부분은 누락하는 경우도 있긴 한데
그러면 각종 핵에 취약해지는 단점이 있습니다.
그 다음 리니지2M과 같이 3D이지만 미세한 그리드 단위로 관리하는 게임도 있는데
그럴 경우에는 강의 구조처럼 진짜 그리드 단위로 물체 여부를 관리하게 됩니다.
마지막으로 어떤 구조라 하더라도
몬스터 AI는 서버에서 관리하므로 길찾기가 필요하게 되는데,
그러기 위해서는 그리드나 복셀과 같은 형태로 어떻게든 맵을 표시를 할수밖에 없고,
몬스터는 결국 칸 단위로 움직인다고 보시면 되겠습니다.
(단 클라에서 자연스럽게 보정을 해줘서 스르륵 움직이는 것처럼 보이겠죠)
0