[내일배움캠프 Unity 9기]

06/18 TIL 프로젝트 마무리 및 발표 자료 정리

kyvv 2025. 6. 18. 23:27

트러블 슈팅

플레이어 동기화

[발생]

  • 플레이어 입장시 Host 환경 기준으로 입장한 플레이어들의 입력이 반영되지 않음

[원인]

  • 플레이어 Object들이 각 Client 환경 내에서 개인 환경에 대한 입력 권한을 기준으로 입력을 처리하고 무시하면서 Host 환경에 있는 플레이어 Object들의 입력 처리가 이루어지지 않았음
  • 그로 인해 Host 측으로 움직임이 동기화가 이루어지지 않아 Client에서는 움직임이 입력은 되지만 Host 환경에서는 입력 처리가 되지 않아서 움직이지 않게 되었고, 이로 인해 Client 오브젝트들이 Host에서 고정되는 현상이 생겼음

[개선 시도]

  • Fusion에 기본 제공 기능이 있는지 파악 시도
  • 입력 값은 각 플레이어 고유 적용되도록 제한이 걸려 있는 상황에서 움직임까지 제한할 필요 없다는 판단

[해결 완료]

    • SIMPLE KCC 라는 Fusion2 제공 기능을 통해 캐릭터 컨트롤러 동기화를 맞추고 있다는 공식 문서와 멀티 환경에서 입력값이 넘어오는 것을 공식 문서 및 디버깅으로 확인한 후 우측의 코드를 주석 처리함으로써 해결
       

 

카메라 핸들

 

 

[발생]

      • 시네머신을 적용하여 카메라 구현하였으나 총기 반동이 원활하지 않음

[원인]

      • 시네머신에서 다른 방식으로 로테이션 값을 처리하여 고정됨.
      • 또한 모든 캐릭터 조작을 담당하는 ProcessInput 함수에서 좌우이동, RefreshCamera에서 상하이동을 따로 구현되어 있는 걸 발견.
      • 카메라 조작 메소드 RefreshCamera 함수 추적 해보니 여러 곳에 사용되고 있으나 동작하지 않음. (코드 가독성 문제 발생)
      • 카메라 움직임이 일반구현 → 서버구현 → 시네머신구현 등 다른 사람들의 손을 걷치며, 서로 다른 방식으로 구현한 것으로 판단됨.

[개선 시도]

      • 총기 반동 적용을 위해 기본 카메라만 이용
      • 카메라 조작 메서드 RefreshCamera가 오용된 부분을 제거 및 재정의

[해결 완료]

    • RefreshCamera 에 상하좌우 회전코드를 전부 작성하여 가독성 상승. ProcessInput 함수에 넣어 플레이어 조작에 포함됨을 표현.



프로젝트를 진행하면서 fusion2에 대해 파악한 점
- 네트워크 오브젝트로 동기화를 맞추고자 한다면 자식부터 부모까지 네트워크 오브젝트가 붙어있어야지 동기화가 잘 이루어진다
- 캐릭터의 메인 카메라에 네트워크 오브젝트가 붙게 된다면 레이 캐스트를 카메라 기준으로 쏠 시, 호스트-클라이언트 환경에서는 클라의 ray가 다른 캐릭터(주로 호스트)의 카메라로 동기화가 이루어진다- InputAuthority : 현재 클라이언트가 이 객체에 대해서 입력(컨트롤)이 가능한가- StateAuthority : 이 객체가 호스트 환경에 있는지

 

모든 네트워크 프리팹은 fusion에서 실행 시 config 파일로 올라가 등록이 되며, runner.spawn(네트워크 프리팹)/despawn을 통해 생성/삭제를 할 수 있으며 이는 네트워크에 동기화를 맞춰준다