using System; using ExitGames.UtilityScripts; using UnityEngine; public class DemoOwnershipGui : MonoBehaviour { public GUISkin Skin; public bool TransferOwnershipOnRequest = true; public void OnOwnershipRequest(object[] viewAndPlayer) { PhotonView photonView = viewAndPlayer[0] as PhotonView; PhotonPlayer photonPlayer = viewAndPlayer[1] as PhotonPlayer; Debug.Log(string.Concat("OnOwnershipRequest(): Player ", photonPlayer, " requests ownership of: ", photonView, ".")); if (TransferOwnershipOnRequest) { photonView.TransferOwnership(photonPlayer.ID); } } public void OnOwnershipTransfered(object[] viewAndPlayers) { PhotonView photonView = viewAndPlayers[0] as PhotonView; PhotonPlayer photonPlayer = viewAndPlayers[1] as PhotonPlayer; PhotonPlayer photonPlayer2 = viewAndPlayers[2] as PhotonPlayer; Debug.Log(string.Concat("OnOwnershipTransfered for PhotonView", photonView.ToString(), " from ", photonPlayer2, " to ", photonPlayer)); } public void OnGUI() { GUI.skin = Skin; GUILayout.BeginArea(new Rect(Screen.width - 200, 0f, 200f, Screen.height)); string text = ((!TransferOwnershipOnRequest) ? "rejecting to pass" : "passing objects"); if (GUILayout.Button(text)) { TransferOwnershipOnRequest = !TransferOwnershipOnRequest; } GUILayout.EndArea(); if (PhotonNetwork.inRoom) { int iD = PhotonNetwork.player.ID; string arg = ((!PhotonNetwork.player.IsMasterClient) ? string.Empty : "(master) "); string colorName = GetColorName(PhotonNetwork.player.ID); GUILayout.Label(string.Format("player {0}, {1} {2}(you)", iD, colorName, arg)); PhotonPlayer[] otherPlayers = PhotonNetwork.otherPlayers; foreach (PhotonPlayer photonPlayer in otherPlayers) { iD = photonPlayer.ID; arg = ((!photonPlayer.IsMasterClient) ? string.Empty : "(master)"); colorName = GetColorName(photonPlayer.ID); GUILayout.Label(string.Format("player {0}, {1} {2}", iD, colorName, arg)); } if (PhotonNetwork.inRoom && PhotonNetwork.otherPlayers.Length == 0) { GUILayout.Label("Join more clients to switch object-control."); } } else { GUILayout.Label(PhotonNetwork.connectionStateDetailed.ToString()); } } private string GetColorName(int playerId) { switch (Array.IndexOf(PlayerRoomIndexing.instance.PlayerIds, playerId)) { case 0: return "red"; case 1: return "blue"; case 2: return "yellow"; case 3: return "green"; default: return string.Empty; } } }