2023년 8월 28일 월요일

Network Physics - Client-Side Prediction With Physics In Unity

출처

Client-Side Prediction With Physics In Unity

메모

물리 오브젝트에 대해서 prediction을 처리하는 방법에 대해서 설명한다.

  1. Auto-Simulation을 끄고 직접 호출한다
  2. 클라이언트에서 fixedTimeDelta마다 InputState를 처리하고, 서버로 보낸다. 그리고, simulation을 호출한다.
  3. 서버에서 받은 InputState가 있으면, 처리하고, simulation을 호출하고 SimulateState를 클라이언트로 보낸다.
  4. 클라이언트에서 받은 SimulateState가 있고, 기록해둔 위치와 차이가 크면, 보정을 한다
  5. 클라이언트에서 입력을 중복으로 보내기. 패킷 최적화를 할 수도 있다. (delta-compression of the inputs)
  6. 서버에서 스냅샷 빈도를 조절
  7. 클라이언트에서 위치 보정을 부드럽게 처리하기
관련성

물리 오브젝트를 네트워크 동기화 처리할 때 참고한다

날짜

2023.8.28

Network Physics - Lag Compensation - Fair Play for all Pings

출처


메모

Client-Prediction 기법을 사용하면, 렉이 심한 유저는 상대를 맞힐 수 없는 상황이 발생한다. 이에 대한 처리를 설명한다.

알고리즘은 다음과 같다.

  1. 매 틱마다 모든 타겟(플레이어, 오브젝트 등등)의 위치를 저장한다. (1틱 = 50ms, 20틱 동안의 기록을 관리한다. 1000ms이 넘어가는 상황에 대해서는 보장하지 않는다.)
  2. 발사체 발사 이벤트를 받으면, 현재 시간과 클라이언트의 랙을 합해서 틱을 계산한다.
  3. 해당 틱의 기록에서 발사체와 충돌이 되는 타겟을 찾는다.
  4. 충돌되는 타겟을 못 찾으면 틱을 현재 틱까지 하나 씩 증가 시키면서 타겟을 찾을 때까지 계속한다
관련성

Fast-Paced 멀티플레이어를 만들 때, 적용하자

날짜

2023.8.28

2023년 8월 18일 금요일

차량 - Arcade Car Physics - Vehicle Simulation

출처


메모

내가 재미있는 차량 물리학 및 아케이드 제어를 만들려고 시도했다. 주요 목표는 설정하기 쉽고 재미있게 플레이할 수 있는 차량 컨트롤러를 만드는 것이었다. 나는 결과에 꽤 만족하고 있다. 이 방법은 GTA, 로켓 리그 또는 Flatout과 같은 게임에 사용될 수 있다.

차량 물리 시뮬레이션 관련 코드와 리소스들이 정리되어 있다



관련성

차량 구현에 참고한다

날짜

2023.8.18

2023년 8월 15일 화요일

플레이 - Cosmo Collection

출처


메모

저폴리 (low poly) PBR 게임용 준비된 공상과학 (Sci-Fi) 여성 캐릭터 컬렉션입니다. 5개의 유니크한 모듈식 캐릭터가 포함되어 있습니다. 모든 캐릭터들은 동일한 몸체를 가지고 있어서: 이들의 모듈식 갑옷을 무한한 조합으로 혼합할 수 있습니다!
렌더 파이프라인 호환성



관련성

MADASS 메인 케릭터에 활용해보자.

날짜

2023.8.15

Network Physics - Fast-Paced Multiplayer

출처


메모

클라이언트-서버 게임 아키텍처는 다음과 같이 요약할 수 있습니다:

1. 서버는 모든 클라이언트로부터 입력을 받아 타임스탬프와 함께 처리합니다.
2. 서버는 입력을 처리하고 세계 상태를 업데이트합니다.
3. 서버는 모든 클라이언트에게 정기적으로 세계의 스냅샷을 전송합니다. (SimulatonState)
4. 클라이언트는 입력을 전송하고 그 효과를 로컬에서 시뮬레이션합니다. (ClientInputState) (Prediction)
5. 클라이언트는 세계 업데이트를 받아서
    - 예측된 상태를 권한 있는 상태에 동기화하고, (Reconciliation)
    - 다른 엔터티에 대한 알려진 과거 상태를 보간합니다. (Interpolation)

플레이어의 관점에서 이것은 두 가지 중요한 결과를 가지고 있습니다:

1. 플레이어는 자신을 현재 상태로 볼 수 있습니다.
2. 플레이어는 다른 엔터티를 과거 상태로 볼 수 있습니다.

헤드샷과 같은 처리를 위해서 다음과 같이 처리할 수 있다.

Lag Compensation

관련성

멀티플레이어 게임을 만들때 참고한다

날짜

2023.8.15

Network Physics - Seamless fast paced multiplayer in Unity3D. Implementing client-side prediction.

출처


메모

유니티로 클라이언트 사이드 예측을 구현하는 방법에 대해서 다음 내용을 설명한다.

  1. ClientInputState - 사용자 입력 상태를 다룬다
  2. SimulationState - 플레이어의 위치 상태를 다룬다
  3. CharactorController - ClientInputState와 SimulationState를 보내고 받아서 처리하는 방법을 다룬다
  4. Reconcliclate - 클라이언트에서 서버로부터 받은 상태를 적용하는데, 차이가 크면, 그 동안 캐쉬해뒀던 정보를 기반으로 조정을 한다
  5. ServerSimulater - 클라이언트로 부터 받은 ClientInputState를 CharactorConteroller::ProcessInput을 호출하고 상태를 다시 클라이언트로 보낸다.

관련성

네트워크 물리를 만들때 참고한다

날짜

2023.8.15

2023년 8월 13일 일요일

플레이 - Bettlefield 2042

출처

Battlefield 2042 Conquest

메모

전투기 싸움


관련성

전투기 싸움에서 레이더와 플레이를 활용하는 방식을 참고한다

날짜

2023.8.13