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

UI 설정 - 3) 플레이어별 색상 설정

monstro 2026. 3. 30. 17:35
728x90
반응형

- 개요

Room에 입장한 플레이어마다 색상을 선택하여 다른 플레이어들과 구분할 수 있도록 설정한다

최대 6명의 플레이어까지 Room에 입장하여 색을 선택할 수 있다

 

- 스크립트 작업

1) ObjectManager 클래스

 

씬에 존재하는 특정 오브젝트들ObjectManager에 등록하는 경우

이미 등록이 되어있는지 판단하고 등록하도록 코드를 수정하였다

 

2) SpawnCharacter 클래스

 

WaitToSpawn 함수의 로직을 위와 같이 수정한다

기존에 사용하는 CountOfPlayers는 단순하게 서버가 인식하는 Room의 인원수를 의미하므로

참여하고 있는 플레이어의 고유한 순번을 보장하지 못한

이로 인해 동기화 문제가 발생하면 클라이언트마다 동일한 CountOfPlayers 값이 설정될 수 있다

동일한 스포너에서 플레이어가 스폰되는 문제의 원인은 위와 같으며

따라서 PUN에서 제공하는 플레이어의 고유한 순번ActorNumber를 사용하는 방식으로 수정하였다

 

3) DisplayColor 클래스

 

DisplayColor 클래스를 추가하여 플레이어의 색상을 설정한다

멤버변수의 구성은 위와 같다

  • colors 멤버변수 : 적용할 플레이어의 색상
  • cachedPhotonView 멤버변수 : 플레이어에 수식된 PhotonView 컴포넌트
  • playerRender 멤버변수 : 플레이어에 수식된 Renderer 컴포넌트

 

Awake 함수에서는 2개의 컴포넌트 멤버변수의 값을 설정한다

ApplyColor 함수의 로직은 위와 같이 구성하여 로컬 클라이언트인 경우에만

playerRenderer 멤버변수를 통해 플레이어의 색상을 설정한다

 

4) UI_ChooseColor 클래스

 

UI_ChooseColor 클래스를 사용하여 색상을 설정하는 버튼을 동작시킨다

멤버변수의 구성은 위와 같다

  • panel 멤버변수 : 색상을 설정하는 버튼의 조상 오브젝트
  • cachedPhotonView 멤버변수 : 버튼에 수식된 PhotonView 컴포넌트

 

 

Start 함수를 위와 같이 구성하여 마우스 커서보이도록 설정하고 멤버변수의 값을 설정한다

 

 

GetLocalPlayerViewID 함수의 로직은 위와 같다

"Player" 태그를 지니고 있는 오브젝트를 순회하여 로컬 플레이어라면 해당 플레이어의 ViewID를 반환한다

 

 

SelectButton 함수의 로직은 위와 같다

cachedPhotonView 멤버변수를 사용하여 AllBuffered RPC로 설정된 SelectedColor 함수를 호출한다

이때 함수의 인자로 선택한 버튼의 번호로컬 클라이언트의 ViewID를 넘겨준다

이후 마우스 커서 버튼의 조상 오브젝트를 비활성화한다

 

 

SelectedColor 함수의 로직은 위와 같다

Player 오브젝트들을 순회하면서 인자로 받은 값을 넘겨주고 ApplyColor 함수를 호출하여

선택한 색상을 다른 플레이어들에게도 동기화시킨다

이후 색상 선택 버튼을 비활성화하여 다른 플레이어들이 선택할 수 없도록 설정한다

 

- 애셋 작업

1) 인게임 - 색상 선택 버튼 UI

 

위와 같이 해당 UI들의 Button 컴포넌트에서 OnClick 이벤트에 SelectButton 함수를 바인드한다

 

- 최종 실행 결과

첫 번째 플레이어

 

두 번째 플레이어

 

세 번째 플레이어

728x90
반응형