/// <summary> /// Called when a remote player left the room. /// See the official Photon docs for more details. /// </summary> public override void OnPlayerLeftRoom(Photon.Realtime.Player player) { //only let the master client handle this connection if (!PhotonNetwork.IsMasterClient) { return; } //get player-controlled game object from disconnected player GameObject targetPlayer = GetPlayerGameObject(player); //process any collectibles assigned to that player if (targetPlayer != null) { Collectible[] collectibles = targetPlayer.GetComponentsInChildren <Collectible>(true); for (int i = 0; i < collectibles.Length; i++) { //let the player drop the Collectible PhotonNetwork.RemoveRPCs(collectibles[i].spawner.photonView); collectibles[i].spawner.photonView.RPC("Drop", RpcTarget.AllBuffered, targetPlayer.transform.position); } } //clean up instances after processing leaving player PhotonNetwork.DestroyPlayerObjects(player); //decrease the team fill for the team of the leaving player and update room properties PhotonNetwork.CurrentRoom.AddSize(player.GetTeam(), -1); }