본문 바로가기

관심분야/게임

객체 이동 방식에 대한 반전!!!

온라인 게임을 논하는 중에 이동 처리 방식에 대한 다양한 의견들이 제시되고 시험되고 있다.

지금 이 시간에도 이러한 논의를 계속 하고 있는 개발자 들이 상당히 있을 것이다.
그럼, 왜 이에 대한 논의가 많은 것일까?

   객체 이동은 게임의 기본적인 동작의 표현이자, 서버에게는 데이터 처리를 위해 가장 많은 시간을
   사용하게 되는 처리이기 때문이다. -- 그리고, 서버 부하의 주된 원인이 이동 때문에 발생된다고 해도
   될 만큼의 부하가 존재하기 때문이다.

그럼, 몇가지 객체 이동 방식에 대해 알아 보자.

    1. 현재 위치를 일정 조건에 서버로 전송하는 방식
       : 위치의 변화 또는 일정 시간(예를 들어 0.5초) 경과후 현재 위치를 서버로 전송 하는 방식

       - 장점
         * 위치 이동 응답성이 빠르다
         * 비교적 개발이 간단하다.

       - 단점
         * 짧은 이동 또는 잦은 위치 변화시 서버의 부하가 발생된다.
            : 밀집된 공간에서 이러한 행동이 발생될 경우, 서버의 부하는 급속도로 증가한다.

   2. 일정 시간 단위로 서버에 전송하는 방식 (1안의 서버 부하 때문에 구현해 보게 되었다~)
        : 데이터 전송 전 (일정 시간 - 예를들어 0.5초), 위치 변화를 기록후 기록 정보를 서버로 전송하는 방식

        - 장점
           * 짧은 이동 또는 잦은 위치 변화에도 서버 부하가 적다.
              : 일정 시간 단위로 처리 되므로, 전송 전 움직임이 많더라도 실제 전송되지 않는다.
           * 밀집된 공간의 이동제어가 1안)에 비해 상대적으로 우수하다.

        - 단점 (단점보다는 제한점이 맞을듯 싶다!!)
           * 일정 시간 단위로 처리가 되므로 이동 딜레이가 발생한다.
             : A 객체의 이동이 B 객체가 인식하는데 최소 서버 왕복시간 + (위치 이동 시간 간격)의 오차가
               발생된다. 예를 들어, 서버 왕복 시간 (A -> S -> B)이 100msec 이고, 위치 이동 시간 간격이
               500msec 인 경우, 최소 600 msec의 이동 딜레이가 발생되게 된다.

             : But, A 객체의 이동이 B 객체가 인식하는데 시간이 걸리듯, A객체도 B객체의 이동을 인식하는데
               시간이 걸리게 되므로 상대적으로 서로 딜레이를 인식하지 못한다
.

           * 이동한 경로를 가지고 객체간의 딜레이가 존재하는 상태이므로, 정확한 위치 판단을 위해 데이터
              보완이 필요하다
              : 이동 경로 데이터를 저장한후, 데이터 처리시 검증하는 행위등~

            * 전투와 같은 스피드한 처리를 위해서는 1안)의 처리와 병행되어 처리되어야 한다.
              : 전투전 서로의 딜레이를 제거하는 위치 동기화 후 처리를 시작해야 한다.

그럼, 이 방식 중 가장 좋은 것은 무엇일까?

결정은 잠시후에~

1안) 의 경우는 상대적으로 개발하기에는 수월하지만 이동이 빈번하게 발생될수 있는 상황일 경우
       예를 들어, 던전과 같은 지형이 복잡하여 짧은 위치 변화가 많이 요구 되는 경우 서버의 부하가
       상대적으로 급격히 증가하는 단점(실제로 경험하여 보면 단점 이상으로 느끼게 된다.)이 존재하고,

2안) 의 경우는 1안)에 비해 이동에 대한 서버의 부하는 상대적으로 안정적이며, 예측 가능한 모델이지만,
      전투와 같이 스피드한 게임을 진행하기 위해서는 1안)과 병행해 사용하는 등의 복잡한 처리가 필요한
      단점이 있다. -- 물론 구현 난의도 또한 증가한다.

엇듯 보면, 2안)의 필요성이 없어 보일 수 있지만 게임의 진행 중 전투가 차지하는 비중과, 이동이 차지하는
비중을 비교해 본다면
왜, 2안)을 가지고 고민을 하게 되는지 쉽게 이해할수 있을 것이다.

그러나.. 개발에서는 실제 1안)을 적용하고, 서버에서 전송(OUT)되는 데이터량의 최적화에 좀더 많은 기술을
투자하고 있는 상황이다.

그럼.. 여기에서 테스트한 결과를 정리해 보면..