본문 바로가기

관심분야/게임

객체 이동 경로 관리

여기에서 말하고자 하는 것은 앞으로 이동할 경로에 대한 예측이 아닌, 현재 객체가 이동한 경로를 관리하고
처리하는 방식에 대해 논의해 보고자 한다.

어떻게 보면 이미 지난 데이터라 의미없을지 모르지만 예측이 아닌 객체(A)의 이동 처리 방식에서는 타 객체(B)의 현재 위치는 예전 위치이기 때문에 만약, 타 객체(B)가  객체(A)를 공격할때 이에 대한 정확한 판단이
필요하게 된다. == 이를 위해 다음과 같은 객체의 처리가 필요하게 된다.

사용자 삽입 이미지

다음과 같이 객체의 이동이 발생 되었다고 가정하다.

객체(A)는 이동을 하지만, 객체(A)를 보고 있는 다른 객체(B)는 일정 시간 이후에 객체(A)의 이동을 보게 된다.

이러한 시점에서 객체(B)가 객체(A)를 공격한다면?

서버에서는 객체(A)가 객체(B)가 보고 있는 시점에 공격을 받는 위치에 있었는지 판단할 필요가 있다.

이를 위해 다음과 같은 처리 방식을 사용한다.

** FPS와 같이 이동에 대한 예측(객체(A)의 이동을 객체(B)는 바로 감지 한다)에서는 해당 방식을 사용할 필요가 없다.


객체 관리를 위해 필자는 다음과 같은 관리 구조를 가지고 있다.

해당 구조는 객체가 이동한 경로를 받아 일정 경로를 저장하고 있다가, 위치에 대한 판단이 필요할때 해당 정보를 참고하기 위해 사용되어 진다.

처리방식을 보면,
   1. 클라이언트는 일정 시간동안 자신(객체)의 이동 변화를 기록한다.
   2. 기록된 이동 변화 정보를 일정 시간 단위로 서버로 전송한다.
   3. 서버는 마지막 위치로 이동을 시키고 이동 경로를 저장한다.

여기에서 중요한 것은 이동이 발생된 시간인데 이 시간을 중심으로 객체의 위치를 판단하게 된다.

또한, 이렇게 저장된 정보를 시야범위에 따른 데이터 위치를 최소화 하는 용도로 사용할수 있다.

여기에 추가적으로 해당 시간에 존재한 위치를 얻기 위해서는 일부 예측이 사용되어야 한다.
== 객체가 이동 중일수 있으므로, 위의 처리는 객체의 이동변화에 대한 값 만을 관리하고 있어, 이에 대한
   보정을 위해서는 일정 시간 이후(A -> B이동) 해당 객체의 위치를 예측해야 한다.