top of page

Study] Photon Cloud(Unity)-11

  • 작성자 사진: 김영호
    김영호
  • 2023년 1월 30일
  • 2분 분량

최종 수정일: 2023년 4월 25일

  • Photon Cloud 기능

- OnMasterClientSwitched(Player newMasterClient)

: Master가 바뀔때 호출되는 Callback 함수

- PhotonNetwork.AutomaticallySyncScene

: Photon Network를 통해서 씬 전환을 같이 할지 정하는 변수 (bool)

- PhotonNetwork.LoadLevel(string sceneName)

: Photon Network를 이용해서 방에 있는 사람들을 동시에 씬 전환 해주는 함수

주의) LoadLevel(...)은 마스터만이 동작할 수 있음, 마스터가 아닌 경우엔 다함께 씬 전환을 하지 않음



  • Player 정보 갱신

public class GameRoom : MonoBehaviourPunCallbacks
{
    ...
    ...
    ...
    
    void UpdatePlayerInfo()
    {
        //플레이어 리스트 갱신
        Player[] players = PhotonNetwork.PlayerList;

        for (int i = 0; i < 2; i++)
        {
            //Defualt Text
            string shooterName  = "...";
            string isLocal      = "...";
            string isMaster     = "...";

         //Get player info
            if (players.Length > i)
            {
                shooterName = players[i].CustomProperties["Shooter"].ToString();
                isLocal     = players[i].IsLocal        ? "Local"   : "Remote";
                isMaster    = players[i].IsMasterClient ? "Master"  : "User";
            }
         
         //Text UI Update
            uiPlayers[i].Find("ShooterName")  .GetComponent<Text>().text = shooterName;
            uiPlayers[i].Find("IsLocal")      .GetComponent<Text>().text = isLocal;
            uiPlayers[i].Find("IsMaster")     .GetComponent<Text>().text = isMaster;
        }
    }
}

기능 관리의 용의성을 위해 이전에 만들었던(방에 접속한 플레이어의 정보 띄우기) Player 정보 갱신 부분함수화 하고, 연결되어있지 않는 Player의 자리에는 기본값을 적용하도록 하였다.



  • Test

ree

ㄴUser 입장 전

ree

ㄴ입장 후

ree

ㄴ마스터 퇴장(마스터 교체)


  • OnMasterClientSwitched(...)

public class GameRoom : MonoBehaviourPunCallbacks
{
    ...
    ...
    ...
    
    public override void OnmasterClientSwitched(Player newMasterClient)
    {
        PopupMessageBox("Master Client Switched", "마스터가 변경되었습니다.");
    }
}

Master가 바뀌게 되었을 때 호출되는 Photon Cloud Callback 함수



  • 방에 들어와있는 사람들과 같이 LoadScene하기

게임을 시작 할 때 게임 방에 들어와 있는 사람들이 전부 같이 게임에 진입하기 위해 사용하는 것은 두가지가 있다.


  • PhotonNetwork.AutomaticallySyncScene

public class Launcher : monoBehaviourPunCallbacks
{
    ...
    ...
    ...
    
    void Awake()
    {
        //같은 방에 있는 Player들이 함께 load Scene을 할 수 있도록 허용
        PhotonNetwork.AutomaticallySyncScene = true;
    }
}

  • PhotonNetwork.LoadLevel(string name")

public class GameRoom : MonoBehaviourPunCallbacks
{
	...
	...
	...
	
	//포톤네트워크를 이용해서 방에 있는 사람들 동시 전환
        if (PhotonNetwork.LocalPlayer.IsMasterClient)    //Local Player is Master?
            PhotonNetwork.LoadLevel("GameScene");
        else
            PopupMessageBox("Start game failse", "마스터만 게임을 시작할 수 있습니다.");
}

PhotonNetwork.LoadLevel(...) 함수는 위에서 방에 들어와있는 인원들과 함께 LoadScene을 하게 해주는 함수이다.

주의할 점으로는 Master가 실행하지 않으면 다같이 시작되지 않기 때문에 미리 Local Player가 Master인지 확인해야한다.



  • Test

ree

Local이 Master가 아닐때 시작 방지

ree

방에 들어와있지 않던 가장 왼쪽 Client는 게임이 시작 되지 않은 것을 확인할 수 있다.

  • Facebook
  • Twitter
  • LinkedIn

©2021 by 김영호_포트폴리오. Proudly created with Wix.com

bottom of page