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

서버 연결 - 최종) 무기 스포너 설계 + 무기 변경 동기화

monstro 2026. 3. 17. 20:02
728x90
반응형

- 개요

무기를 생성하는 무기 스포너를 추가하고

로컬 클라이언트의 플레이어변경한 무기다른 클라이언트 플레이어에게 보여지도록 동기화한다

 

- 애셋 작업

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 함수를 실행하도록 설정한다

 

- 최종 실행 결과

무기 생성

 

무기 변경 동기화

728x90
반응형