유니티 엔진 - 게임 프로젝트/Photon을 사용한 멀티 플레이어 게임

서버 연결 - 3) 다른 클라이언트와 위치 + 애니메이션 동기화

monstro 2026. 3. 16. 15:32
728x90
반응형

- 개요

로컬 클라이언트에서 플레이중인 캐릭터의 위치애니메이션 다른 클라이언트와 동기화하는 작업을 진행한다

Photon PUN 프레임워크에 제공하는 Photon Transform View 컴포넌트를 사용하면

캐릭터의 Transform의 변화를 네트워크에 연결된 다른 플레이어들에게 실시간으로 전달할 수 있다

따라서 해당 컴포넌트를 사용하여 프로젝트를 설계한다

 

- 애셋 작업

1) 플레이어 캐릭터에 대한 Photon Transform View 컴포넌트

Photon Transform View 컴포넌트 - 플레이어 프리팹

 

Photon Transform View 컴포넌트 - 리깅이 적용되는 본

 

플레이어 프리팹리깅이 적용되는 대상 Photon Transform View 컴포넌트를 추가한다

플레이어 프리팹의 Photon View 컴포넌트에서 Photon Transform View 컴포넌트가 적용된 대상을 확인할 수 있다

 

Photon View 컴포넌트 - 플레이어 프리팹

 

이후 Photon View 컴포넌트의 Observable SearchManual로 수정하여 임의로 조작할 수 있도록 설정한다

이어서 플레이어 프리팹의 Animator 컴포넌트를 Photon View 컴포넌트에 드래그 앤 드롭한다

 

Photon Animator View 컴포넌트 - 플레이어 프리팹

 

자동으로 추가된 플레이어 프리팹의 Photon Animator View 컴포넌트에서 Continous로 설정하여 

지속적으로 Animator의 파라미터를 추적하여 동기화하도록 설정한다

이후 Photon View 컴포넌트의 Observable Search를 Auto Find All로 복구한다

 

2) 조준선 오브젝트에 대한 Photon Transform View 컴포넌트

플레이어별 조준선 오브젝트

 

플레이어 프리팹플레이어마다 갖고 있는 조준선 오브젝트를 추가한다

 

 

새롭게 생성한 플레이어별 조준선 오브젝트리깅의 기준이 되는 소스 오브젝트로 할당한다

 

 

플레이어별 조준선 오브젝트Photon Transform View 컴포넌트를 추가한다

 

- 스크립트 작업

1) PlayerLookAimRef 클래스

 

플레이어 프리팹에 추가한 플레이어별 조준선 오브젝트에서 사용할 PlayerLookAimRef 클래스를 생성한다

클래스의 구성은 위와 같다

  • Start 함수 : 월드에 존재하는 "PlayerAim"의 이름을 가진 조준선 오브젝트를 찾고 값을 저장
  • FixedUpdate 함수 : 로컬 클라이언트라면 플레이어별 조준선 오브젝트의 위치PlayerAim 오브젝트와 통일

 

2) PlayerWeaponChange 클래스

 

조준선의 위치에 따라 리깅을 적용하는 기존의 로직과 관련 멤버변수를 삭제한다

 

3) PlayerController 클래스

 

Start 함수에서 로컬 클라이언트가 아니라면 RigBuilder 컴포넌트를 비활성화하는 로직을 삭제한다

 

- 최종 실행 결과

728x90
반응형