내일배움캠프 Unity 44일차 TIL - 심화 주차 개인과제 - Photon

Wooooo·2023년 12월 28일
0

내일배움캠프Unity

목록 보기
46/94

[오늘의 키워드]

오늘은 개인과제에 필요한 기능은 거의 다 구현하고, 제출 전 마지막으로 Master Client (Host)가 아닌 일반 클라이언트에서 공의 속도가 너무 빠를 때 발생하는 지터링을 해결해보려했다.

결론만 말하면, 아직 해결하진 못 했다...


[객체 동기화 중 지터링 발생]

공이 벽에 닿을 때마다 울렁거린다,,


[PhotonView Synchronization 속성 변경]

포톤 공식 문서 : Synchronization and State

  • Reliable Delta Compressed
    IPunObservable 인터페이스를 구현해야 사용할 수 있다.
    데이터의 손실이 없다고 한다.
  • Unreliable
    데이터를 순서대로 수신하지만 손실 가능성이 있는 대신, 지연이 적다고 한다.
  • Unreliable On Change
    데이터를 순서대로 수신하지만 손실 가능성이 있다. 마지막 수신 값에 변경점이 없다면 업데이트 전송을 일시 중지한다고한다.

3개 모두 바꿔가며 사용해봤지만, 해결이 되진 않았다.

그래서 다른 방법인 지연 보상을 사용해보기로 했다.


[지연 보상]

포톤 공식 문서 : Lag Compensation

간단하게 말하면,
마스터 클라이언트가 일반 클라이언트로 데이터를 보내는 시간 동안, 객체는 계속 움직이고 있다.
그 지연 시간의 차이를 계산해서 객체가 진행하던 방향만큼 속도를 곱해서 더해주면 실제 객체의 위치를 예측해낼 수 있다.

아주 맞는 말이라 적용해봤지만, 공식 문서의 코드를 그대로 적용하면 안되는 것 같다.

왜냐하면, 지연 보상은 지연되는 동안 객체가 방향을 바꾸지 않았다는 가정하에 실제 위치를 예측한다.
하지만 내 공은 벽에 닿으면 방향을 바꾼다. 이 과정에서 잘못된 예측으로 인해 실제 객체의 위치와는 격차가 더 벌어지게 되고, 지터링이 더 심해지는 결과가 나왔다.


[다른 해결법?]

  1. 공 속도를 줄인다.
    가장 확실한 해결법인 것 같다. 공 속도가 빠르지 않다면, 지터링이 최소화된다.
  2. 데이터 손실률을 최소화한다.
    데이터가 손실되지 않으면 지터링이 줄어들지 않을까?
  3. 지연 속도를 줄인다.
    포톤에선 핑 80대로 고정되던데, 내가 줄일 수 있는 방법이 있나?
profile
game developer

0개의 댓글