트러블 슈팅
플레이어 동기화
[발생]
- 플레이어 입장시 Host 환경 기준으로 입장한 플레이어들의 입력이 반영되지 않음
[원인]
- 플레이어 Object들이 각 Client 환경 내에서 개인 환경에 대한 입력 권한을 기준으로 입력을 처리하고 무시하면서 Host 환경에 있는 플레이어 Object들의 입력 처리가 이루어지지 않았음
- 그로 인해 Host 측으로 움직임이 동기화가 이루어지지 않아 Client에서는 움직임이 입력은 되지만 Host 환경에서는 입력 처리가 되지 않아서 움직이지 않게 되었고, 이로 인해 Client 오브젝트들이 Host에서 고정되는 현상이 생겼음
[개선 시도]
- Fusion에 기본 제공 기능이 있는지 파악 시도
- 입력 값은 각 플레이어 고유 적용되도록 제한이 걸려 있는 상황에서 움직임까지 제한할 필요 없다는 판단
[해결 완료]
- SIMPLE KCC 라는 Fusion2 제공 기능을 통해 캐릭터 컨트롤러 동기화를 맞추고 있다는 공식 문서와 멀티 환경에서 입력값이 넘어오는 것을 공식 문서 및 디버깅으로 확인한 후 우측의 코드를 주석 처리함으로써 해결

카메라 핸들
[발생]
-
- 시네머신을 적용하여 카메라 구현하였으나 총기 반동이 원활하지 않음
[원인]
-
- 시네머신에서 다른 방식으로 로테이션 값을 처리하여 고정됨.
- 또한 모든 캐릭터 조작을 담당하는 ProcessInput 함수에서 좌우이동, RefreshCamera에서 상하이동을 따로 구현되어 있는 걸 발견.
- 카메라 조작 메소드 RefreshCamera 함수 추적 해보니 여러 곳에 사용되고 있으나 동작하지 않음. (코드 가독성 문제 발생)
- 카메라 움직임이 일반구현 → 서버구현 → 시네머신구현 등 다른 사람들의 손을 걷치며, 서로 다른 방식으로 구현한 것으로 판단됨.
[개선 시도]
-
- 총기 반동 적용을 위해 기본 카메라만 이용
- 카메라 조작 메서드 RefreshCamera가 오용된 부분을 제거 및 재정의
[해결 완료]
-
- RefreshCamera 에 상하좌우 회전코드를 전부 작성하여 가독성 상승. ProcessInput 함수에 넣어 플레이어 조작에 포함됨을 표현.
- RefreshCamera 에 상하좌우 회전코드를 전부 작성하여 가독성 상승. ProcessInput 함수에 넣어 플레이어 조작에 포함됨을 표현.
프로젝트를 진행하면서 fusion2에 대해 파악한 점
- 네트워크 오브젝트로 동기화를 맞추고자 한다면 자식부터 부모까지 네트워크 오브젝트가 붙어있어야지 동기화가 잘 이루어진다- 캐릭터의 메인 카메라에 네트워크 오브젝트가 붙게 된다면 레이 캐스트를 카메라 기준으로 쏠 시, 호스트-클라이언트 환경에서는 클라의 ray가 다른 캐릭터(주로 호스트)의 카메라로 동기화가 이루어진다- InputAuthority : 현재 클라이언트가 이 객체에 대해서 입력(컨트롤)이 가능한가- StateAuthority : 이 객체가 호스트 환경에 있는지
모든 네트워크 프리팹은 fusion에서 실행 시 config 파일로 올라가 등록이 되며, runner.spawn(네트워크 프리팹)/despawn을 통해 생성/삭제를 할 수 있으며 이는 네트워크에 동기화를 맞춰준다
'[내일배움캠프 Unity 9기]' 카테고리의 다른 글
| 최종 프로젝트 Esport Team Maker 회고 (0) | 2025.09.12 |
|---|---|
| 06/05 FSM + BT / 개인 과제 FSM 작성하기 (2) | 2025.06.05 |
| 06/04 TIL 두트윈(feat. 메서드 체이닝) (1) | 2025.06.04 |
| 05/30 TIL SpawnManager 역할 고민, 낮/밤 사이클 전환, NavMesh SamplePosition (0) | 2025.05.30 |
| 05/29 인벤토리 시스템 구조 개선 및 버그 수정 (0) | 2025.05.29 |