[대전 예시 사진]

image.png

[캐릭터 움직임]

캐릭터의 이동은 모든 유저들의 정확한 위치 동기화를 위해 서버 주도로 처리하였습니다. 추측항법을 사용하여 이동 패킷을 송수신할 때의 딜레이를 보안해주었고 추측항법으로 인한 부자연스러운 움직임은 선형보간을 통해 자연스럽게 움직이게 보이도록 구현였습니다.

  1. 클라 → 서버 : 본인이 누른 방향키의 방향을 전달한다.
  2. 서버 : 1번 과정에서 생긴 패킷 딜레이만큼 추측항법으로 좌표를 계산해준 후 실제 좌표까지 계산한다.
  3. 서버 → 클라 : 실제 좌표를 전달하는 과정에서 생기는 딜레이만큼 추측항법으로 좌표를 다시 계산해준 후 전달한다.[근씨 아저씨 스킬]괭이질

[스킬 파격 판정]

스킬 피격 판정은 유저들의 좌표를 서버에서 계산하고 있어서 스킬을 쓸 때 서버에서 해당 스킬을 모든 유저들이 볼 수 있도록 통지를 하고 스킬 범위에 유저가 있는지 체크를 하는 식으로 구현하였습니다.

  1. 클라 → 서버 : 유저가 스킬 키를 누른다.
  2. 서버 : 쿨타임이 정상적으로 돌았는지 검증 확인 후 해당 실제 스킬을 유저에게 통지한다.
  3. 2번 과정에서 생긴 패킷 딜레이만큼 피격 판정도 딜레이줘서 실제 유저의 눈에 스킬이 맞았을 때 피격이 된다.

[동시성 처리]

스킬에 피격당하면 플레이어의 hp는 동시에 접근이 가능하여 hp 값을 동기적으로 처리 못하는 버그를 방지하기 위해 불큐를 사용하여 동시성 처리를 해주어 이미 피가 0이 된 유저를 또 공격하는 등의 동시성 처리 버그를 해결하였습니다.

[캐릭터 스킬]