- 개요
무기를 생성하는 무기 스포너를 추가하고
로컬 클라이언트의 플레이어가 변경한 무기를 다른 클라이언트 플레이어에게 보여지도록 동기화한다
- 애셋 작업
1) 무기 프리팹 애셋

무기 스포너에 의해 생성할 무기의 프리팹 애셋에 위와 같은 컴포넌트를 추가한다
- Photon View 컴포넌트 : 네트워크 통신에 생성된 무기를 참여시키기 위한 컴포넌트
- Audio Source 컴포넌트 : 무기가 습득되면 SFX 효과를 재생하는 컴포넌트
- Box Collider 컴포넌트 : Trigger로 사용하여 플레이어와 상호작용하는 컴포넌트
- Rigidbody 컴포넌트 : 플레이어와 물리작용을 수행할 컴포넌트
- Photon Transform View 컴포넌트 : 네트워크 통신에 무기의 Transform의 변화를 전달하는 컴포넌트
- 스크립트 작업
1) 무기 스포너
1 - 1) SpawnWeapon 클래스

무기를 스폰하는 무기 스포너에 사용할 SpawnWeapon 컴포넌트의 클래스를 생성한다
멤버변수의 구성은 위와 같다
- weapons 멤버변수 : 생성할 무기들
- weaponSpawnPoints 멤버변수 : 무기 스포너의 위치
- weaponRespawnTime 멤버변수 : 무기를 생성하는 간격

SpawnWeaponsStart 멤버함수의 로직은 위와 같다
weapons 멤버변수를 순회하면서 weaponSpawnPoints의 위치와 회전에 맞춰 무기를 생성한다
1 - 2) WeaponRotating 클래스

생성되는 무기에 사용할 WeaponRotating 컴포넌트의 클래스를 생성한다
speed 멤버변수를 사용하여 생성된 무기의 회전속도를 지정하고
Update 함수를 호출하여 생성된 무기를 회전시킨다
1 - 3) WeaponPickup 클래스

1 - 2)의 클래스와 동일하게 생성된 무기에 사용할 WeaponPickup 컴포넌트의 클래스를 생성한다
멤버변수의 구성은 위와 같다
- _audioPlayer 멤버변수 : 무기가 픽업되면서 SFX 효과를 재생하기 위한 AudioSource 컴포넌트
- _respawnTime 멤버변수 : 무기를 다시 생성하기 위한 간격
- WeaponType 멤버변수 : 생성할 무기의 타입

Start 함수를 위와 같이 오버라이드하여 _audioPlayer 멤버변수의 값을 설정한다

OnTriggerEnter 함수를 위와 같이 오버라이드한다
플레이어가 스폰된 무기와 접촉하면 RpcTarget.All의 방식으로
접속해 있는 모든 플레이어가 PlayPickupAudio 함수와 DisableWeapon 함수를 수행하도록 RPC를 실행한다

PlayPickupAudio 함수의 로직은 위와 같이 구성하여 SFX 효과를 재생한다
DisableWeapon 함수의 로직은 위와 같이 구성하여
무기의 타입에 따라 습득한 무기를 비활성화하고 WaitToRespawn 코루틴 함수를 호출한다

WaitToRespawn 함수의 로직은 위와 같이 구성하여 _respawnTime의 시간후에
RpcTarget.All 방식으로 접속해 있는 모든 플레이어가 EnableWeapon 함수를 실행하도록 구성한다
EnableWeapon 함수에서는 무기의 타입에 따라 습득했던 무기를 다시 활성화한다
1 - 4) PlayerWeaponChange 클래스

무기가 제대로 생성되는지 체크하는 간단한 로직을 구성하였다
Start 함수의 로직을 위와 같이 구성하여 무기 스포너에서 무기를 생성한다
2) 무기 변경 동기화
2 - 1) PlayerWeaponChange 클래스

기존의 HandleSwap 함수의 로직을 위와 같이 변경한다
HandleSwap 함수가 호출되면 RpcTarget.AllBuffered의 방식으로 접속해 있는 모든 플레이어에
추가적으로 나중에 Room에 접속할 플레이어들이 SwapWeapon 함수를 실행하도록 설정한다
- 최종 실행 결과


'유니티 엔진 - 게임 프로젝트 > Photon을 사용한 멀티 플레이어 게임' 카테고리의 다른 글
| UI 설정 - 1) 메인메뉴 구현 (0) | 2026.03.24 |
|---|---|
| 서버 연결 - 개선) 오브젝트 관리 + 컴포넌트 참조 개선 (0) | 2026.03.23 |
| 서버 연결 - 3) 다른 클라이언트와 위치 + 애니메이션 동기화 (0) | 2026.03.16 |
| 서버 연결 - 개선) 입력 시스템 2차 개선 (0) | 2026.03.11 |
| 서버 연결 - 2) Room 입장 + 플레이어 분리 (0) | 2026.03.10 |