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

UI 설정 - 개선) GameObject의 Tag 참조 방식 제거

monstro 2026. 4. 20. 16:26
728x90
반응형

- 개요

씬에 존재하는 특정한 GameObject를 참조하기 위해 사용하던 Tag 참조 코드를 완전히 제거한다

UI들은 UIManager 클래스를 추가하여, 플레이어별로 UIManager에 등록하여 참조할 수 있도록 설계하고

플레이어의 경우 Tag를 통해 가져오는 것이 아닌, 컴포넌트를 통해 참조할 수 있도록 수정한다

 

- 스크립트 작업

1) UI 관련 스크립트

1 - 1) UIManager 클래스

 

위와 같이 클라이언트별로 UI를 등록하기 위한 딕셔너리를 추가한다

 

 

각각의 딕셔너리는 위와 같이 3개의 함수로 구성되어 있다

  • Register 함수 : UI의 이름을 사용하여 UI를 등록
  • UnRegister 함수 : UI의 이름을 사용하여 등록한 UI를 등록해제
  • Get 함수 : UI의 이름을 사용하여 등록한 UI를 탐색하여 반환

 

1 - 2) UI_NickName 클래스

 

Awake 함수를 추가하고 위와 같이 로직을 구성하여 UIManager에 등록한다

 

1 - 3) DisplayColor 클래스

 

기존의 GameObject를 사용하던 코드 대신 등록한 UI_NickName 컴포넌트를 사용하여 로직을 수행한다

 

1 - 4) UI_PlayerAim 클래스

 

조준선 UI에 사용하기 위한 UI_PlayerAim 클래스를 추가하고

동일하게 Awake 함수를 추가하여 UIManager에서 등록할 수 있도록 설정한다

 

1 - 5) PlayerLookAimRef 클래스

 

PlayerLookAimRef 클래스에서 등록한 UI_PlayerAim 클래스를 사용하여 로직을 수행한다

 

1 - 6) UI_WeaponAmmo 클래스 + UI_WeaponSlots 클래스

 

 

무기의 탄창과 현재 사용중인 무기를 보여주는 UI에서 사용하기 위한 클래스를 추가한다

2개의 클래스 모두 Awake 함수에서 UIManager에 등록한다

 

1 - 7) PlayerWeaponChange 클래스

 

Start 함수에서 GameObject를 사용하는 것이 아닌 UIManager에 등록된 UI를 사용하도록 수정한다

 

 

SwapWeapon 함수에서 등록된 UI를 사용하여 필요한 컴포넌트 멤버변수를 설정한다

 

1 - 8) UI_PlayerNameBG 클래스

 

접속한 플레이어들의 이름과 체력을 보여주는 UI에 사용할 UI_PlayerNameBG 클래스를 추가한다

Awake 함수를 호출하여 UIManager에 해당 UI를 등록한다

 

1 - 9) UI_ChooseColor 클래스

 

Start 함수에서 Tag를 통해 GameObject를 탐색하는 대신 등록한 UI를 사용하도록 수정한다

 

2) Player 관련 스크립트

2 - 1) UI_ChooseColor 클래스

 

기존의 플레이어 관련 Tag를 지닌 GameObject를 탐색하는 로직을 수정하여

PlayerController 컴포넌트를 지닌 GameObject를 탐색하도록 개선한다

이때 탐색이 끝난 GameObject를 따로 정렬하지 않도록 설정하여 작업 효율을 증가시킨다

 

- 최종 실행 결과

첫 번째 플레이어

 

두 번째 플레이어

728x90
반응형