더북(TheBook)

그림 5-15에서 플레이어는 캐릭터 A만 볼 수 있습니다. 따라서 캐릭터 B가 움직이고 있다 하더라도 그 캐릭터의 이동 메시지를 플레이어에게 보낼 필요는 없습니다. 결과적으로 클라이언트는 자기 근처에 있는 다른 캐릭터들 정보만 가집니다.

한편 서버에서는 모든 플레이어가 모든 캐릭터 정보를 가지고 있어야 합니다. 그뿐만 아니라 서버는 모든 플레이어의 가시 영역 정보도 가지고 있어야 합니다. 그래야 서버에서는 캐릭터 움직임에 변화가 있을 때, 그 캐릭터를 볼 수 있는 다른 플레이어들의 클라이언트에만 변화했다는 내용의 메시지를 보낼 수 있기 때문입니다.

정리하자면, 서버에서는 다음 정보를 가지고 있어야 합니다.

1. 플레이어 각각에 대해서 각 플레이어가 볼 수 있는 캐릭터 목록

2. 캐릭터 각각에 대해서 자기 자신을 볼 수 있는 플레이어 목록

서버에서는 이 정보를 가지고 있고 계속해서 업데이트를 해야 합니다. 서버에서 이에 대한 연산을 할 경우 처리 성능에 악영향을 줄 것이라고 예상하겠지만, 이는 서버가 모든 플레이어에게 모든 캐릭터 정보를 보낼 때 발생하는 처리량 부담 및 네트워킹 부담과 비교하면 훨씬 가볍습니다.

Tip

프라우드넷 샘플의 ProudNet/Sample/SynchWorld에서 가시 영역 필터링을 구현하는 예를 보여 줍니다.

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