본문 바로가기
라테일 정보

[라테일 Tip] 위치랙은 왜 발생하는가

게임은 클라이언트와 서버가 있고, 두개가 무슨 역할을 하는지는 다들 아실거임.

 

잠깐 TMI를 말하자면.

 

클라이언트와 서버가 서로 동일한 환경이야지 오류가 발생되지 않는데, 만약 어디 한 곳이라도 다르면 오류가 발생됨.

 

만약 클라이언트에 A라는 행동을 했는데 서버에 A라는 행동에 대한 정보가 없으면 오류가 발생되고, 클라이언트에 B라는 정보가 없는데 서버에서 B라는 것을 해버리면 오류가 발생됨.

 

특히, 클라이언트에는 있는데 서버에 없는 경우, 심하면 서버 자체가 다운되어서 게임이 먹통 될 수 있음.

 

 

어떤식으로 데이터를 클라이언트에서 서버로 전송하느냐에 따라 발생되는 현상이 다른데, 특정 실험을 통해 알 수 있음.

 

아래 실험은 플레이어 캐릭터 기준으로 데이터 갱신되는 상황을 설명함.

 

1. 네트워크 안좋은 환경에서 베히모스 뱃속으로 이동

2. 상단 이동술을 누른 후 네트워크가 잠깐 끊킴

3. 모든 명령이 들어지지 않고, 주변 움직임은 연결이 끊키기 전과 동일(캐릭터 떨어짐 등)

4. 네트워크가 재연결 됐을 때, 캐릭터가 상단 이동술을 시전함

 

이로써 알 수 있는 데이터 전송 방식은 아래와 같음.

 

'클라이언트에서 데이터 전송 -> 클라이언트 데이터 갱신 멈춤 -> 서버에서 데이터 확인 후 클라이언트로 데이터 전송 -> 클라이언트에서 데이터 갱신'

 

 

데이터 전송 방식을 알았으니, 이제 위치랙이 어디서 왜 발생된건지 생각할 수 있음.

 

1. 대쉬 점프 이동술 사용 즉시 위치랙 발생 -> 움직이면 정상 위치로 이동

2. 대쉬 점프 이동술 사용 후 지형 모서리에 착지 -> 움직이면 땅에 떨어져있음

 

1번의 상황은 프레임이 크게 저하된 상태에서 발생되는 현상으로, 클라이언트가 프레임에 반비례해서 이동값을 잘못 보여주고 있고, 이 후 서버에 캐릭터 이동값을 다시 받으면 서버에 저장되어 있던 캐릭값이 정상 적용되는걸 봐선 서버에 보내고 저장된 이동값은 이상 없는걸 알 수 있음.

 

2번의 상황은 서버에 이동값을 정상 전송했음에도 착지 위치를 잘못 보여주고 있고, 이 후 서버에 캐릭터 이동값을 다시 받으면 서버에 전송했던 위치값이 정상 적용되는걸 봐선 서버에 보내고 저장된 이동값은 이상 없는걸 알 수 있음.

 

즉, 클라이언트 문제라는 것임.

 

 

클라이언트 문제라는 것을 알았으니, 이제 클라이언트에서 왜 이런 문제가 발생되는지 추측해야함.

 

위의 상황에서 이동술 사용할 때는 캐릭터의 명령이 정상 이행되었지만, 이동술의 이동 속도나 착지 지점에 대해서는 잘못 보여주고 있음.

 

이거로 봐선, 플레이어 캐릭터는 명령을 서버에 전송하고 다시 클라이언트로 받으면 행동이 출력되도록 구성되어 있고, 출력되는 모션 등의 '연출'이 서버와 연관 없이 클라이언트 자체에서 보여주고 있음을 알 수 있음.

 

클라이언트 내의 연출 관련된 시스템에 문제가 있는 것이고, 이로 인해 위치랙이 발생되고 있다는 것을 알 수 있음.

 

PC 사향에 관계 없이 점검 이후에 유독 위치랙이 심해진 때도 있고, 점검 이후에 갑자기 위치랙이 사라지는 때도 있는걸 봐선.

 

라테일도 이 문제점에 대해서는 충분히 인지하고 있고, 뭘 잘못 손대면 연출 관련된 시스템이 과부화 걸려버리고, 이에 대한 문제를 잘 알고있는 라테일은 다음 패치 때 위치 관련된 시스템을 최적화 한다는걸 알 수 있음.

 

 

이거와 연관되어서...

 

게임 잠깐 멈추고 풀리면, 멈춘동안 발생된 이펙트가 한번에 출력되어버리는 현상은, 멈춘 동안의 데이터가 한 번에 들어와서 발생된 현상이란걸 알 수 있고.

 

상위 인던에서 특정 몬스터들이 멀리에서 다가오다가 갑자기 캐릭터 앞으로 순간이동 해서 공격하는 현상에 대해서도, 클라이언트에서 보여주는 몬스터 이동 연출이 이동값 보다 느리게 나타나고 있다는 것을 알 수 있음.

 

 

 

결론 : 의외로 위치랙은 라테일 서버탓이 아니라 클라이언트 탓