- 개요
PUN 기반 프로젝트에서 실제 게임 플레이가 이뤄지는 Room에 여러 플레이어들을 입장시키고
입장한 플레이어들간의 조작이 각각 다르게 이루어지도록 설계한다
- 애셋 작업
1) 플레이어 프리팹 수정

PUN에서 프리팹을 생성하기 위해 플레이어 프리팹을 Resources 폴더로 이동시킨다
이후 플레이어 프리팹에 Photon View 컴포넌트를 수식한다
해당 컴포넌트는 PUN 프레임워크의 핵심으로 네트워크상의 주민등록증과 같은 역할을 수행한다
- 스크립트 작업
1) GameManager 클래스

하나의 게임을 관리하는 역할의 GameManager 클래스를 생성한다
MonoBehaviourPunCallbacks를 상속받아 PUN의 각종 이벤트를 처리할 수 있도록 설정한다

Start 함수를 위와 같이 구현하였다
AutomaticallySyncScene 속성을 True로 설정하여 마스터 클라이언트에 따라 다른 클라이언트를 동기화한다
이후 ConnectUsingSettings 함수를 호출하여 Photon 서버에 접속한다

OnConnectedToMaster 함수는 Photon 마스터 서버에 성공적으로 접속하면 호출하는 함수이다
JoinRandomRoom 함수를 호출하여 Lobby에 접속한 후에 무작위 Room에 입장한다

OnJoinedRoom 함수는 Room에 성공적으로 입장하면 호출하는 함수이다
LoadLevel 함수를 호출하여 네트워크 상의 모든 인원을 Floor layout 씬으로 이동시킨다

OnJoinRandomFailed 함수는 무작위 방 참가를 시도했으나 참가 가능한 방이 없으면 호출하는 함수이다
CreateRoom 함수를 호출하여 "Arena1"이라는 이름의 Room을 생성한다
내부적으로 Room 생성에 성공하면 OnJoinedRoom 함수를 다시 호출한다
2) SpawnCharacter 클래스

SpawnCharacter 클래스는 캐릭터를 스폰하는 GameObject에 수식하는 컴포넌트이다
멤버변수의 구성은 다음과 같다
- character 멤버변수 : 스폰할 캐릭터의 프리팹 + 반드시 Resources 폴더에 위치해야 함
- spawnPoints 멤버변수 : 캐릭터 스포너의 배열

Start 함수를 위와 같이 구성하여 WaitToSpawn 코루틴 함수를 호출한다
WaitToSpawn 코루틴 함수의 로직은 위와 같이 구성하여
1초의 지연 시간후에 Instantiate 함수를 호출하여 Room에 접속한 인원의 순서대로
character에 설정한 값의 객체를 캐릭터 스포너의 위치에 생성한다
3) PlayerController 클래스

플레이어별로 동작할 카메라를 설정하기 위한 멤버변수를 추가한다

Start 함수에 위의 로직을 추가한다
- 동작할 카메라의 값을 설정
- IsMine 속성을 확인하여 로컬 클라이언트라면
- 카메라를 설정
- 로컬 클라이언트가 아닌 다른 클라이언트라면
- PlayerController + PlayerInput 컴포넌트를 비활성화하여 다른 플레이어와의 입력의 중복 처리를 방지

Update 함수와 FixedUpdate 함수에서도 로컬 클라이언트인지 검증하는 로직을 추가하여
플레이어 본인을 제외한 다른 플레이어에게 영향을 줄 수 없도록 설정한다
4) PlayerWeaponChange 클래스

조준선 오브젝트와 조준선 오브젝트에 따라 리깅을 적용할 본을 멤버변수로 추가한다

Start 함수를 위와 같이 설정하여 조준선 오브젝트의 값을 설정하고 0.1초 후에 SetLookAt 함수를 호출한다
SetLookAt 함수의 로직은 위와 같이 구성하여 조준선 오브젝트에 맞춰 리깅을 적용한다
'유니티 엔진 - 게임 프로젝트 > Photon을 사용한 멀티 플레이어 게임' 카테고리의 다른 글
| 서버 연결 - 3) 다른 클라이언트와 위치 + 애니메이션 동기화 (0) | 2026.03.16 |
|---|---|
| 서버 연결 - 개선) 입력 시스템 2차 개선 (0) | 2026.03.11 |
| 서버 연결 - 개선) 입력 시스템의 개선 (0) | 2026.03.10 |
| 서버 연결 - 1) Photon PUN의 사용 (0) | 2026.03.09 |
| 프로젝트 세팅 - 최종) 엄지 손가락 리깅 추가 (0) | 2026.03.09 |