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

ㄴUser 입장 전

ㄴ입장 후

ㄴ마스터 퇴장(마스터 교체)
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

Local이 Master가 아닐때 시작 방지

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