Here is the outline of my code:
- Waits until enough players join
- Once enough players have joined a countdown from 5 seconds starts
- All players are joined into a new multiplayer scene
What is happening is that double the player count of players is being instantiated in the photon room. For example, if the room count is 2, then the players instantiated is 4. I checked, and there are no other GameObjects in edit or in play mode with this script attached.
Thanks!
Here is my code:
using Photon.Pun;
using Photon.Realtime;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine;
using System.IO;
public class PhotonRoom : MonoBehaviourPunCallbacks, IInRoomCallbacks {
// Player settings
private PhotonView PV;
public Player [] players;
public int playersInRoom;
// Game settings
private bool isGameLoaded = false;
private bool doneLoading = false;
private bool readyToStart = false;
private int currentScene = 0;
private int multiplayerScene = 1;
// Count down
private float countFrom = 6;
void Awake () {
DontDestroyOnLoad (this.gameObject);
}
private void Start () {
PV = GetComponent<PhotonView> ();
}
public override void OnEnable () {
base.OnEnable ();
PhotonNetwork.AddCallbackTarget (this);
SceneManager.sceneLoaded += OnSceneFinishedLoading;
}
public override void OnDisable () {
base.OnDisable ();
PhotonNetwork.AddCallbackTarget (this);
SceneManager.sceneLoaded -= OnSceneFinishedLoading;
}
private void Update () {
if (!isGameLoaded) {
if (readyToStart) {
Debug.Log ("Hit1");
countFrom -= Time.deltaTime;
Debug.Log ("Time left: " + countFrom);
}
}
if (countFrom <= 0) {
if (doneLoading == false) {
StartGame ();
doneLoading = true;
}
}
}
public override void OnJoinedRoom () {
base.OnJoinedRoom ();
players = PhotonNetwork.PlayerList;
playersInRoom = players.Length;
if (playersInRoom % 2 == 0) {
readyToStart = true;
}
if (playersInRoom == PhotonNetwork.CurrentRoom.MaxPlayers) {
if (!PhotonNetwork.IsMasterClient)
return;
PhotonNetwork.CurrentRoom.IsOpen = false;
}
}
public override void OnPlayerEnteredRoom (Player newPlayer) {
base.OnPlayerEnteredRoom (newPlayer);
players = PhotonNetwork.PlayerList;
playersInRoom++;
if (playersInRoom % 2 == 0) {
readyToStart = true;
}
if (playersInRoom >= PhotonNetwork.CurrentRoom.MaxPlayers) {
if (!PhotonNetwork.IsMasterClient)
return;
PhotonNetwork.CurrentRoom.IsOpen = false;
}
}
void StartGame () {
isGameLoaded = true;
if (!PhotonNetwork.IsMasterClient)
return;
PhotonNetwork.CurrentRoom.IsOpen = false;
PhotonNetwork.LoadLevel(multiplayerScene);
}
void OnSceneFinishedLoading (Scene scene, LoadSceneMode mode) {
Debug.Log ("This was called");
currentScene = scene.buildIndex;
if (currentScene == multiplayerScene) {
isGameLoaded = true;
PV.RPC ("RPC_LoadedGameScene", RpcTarget.MasterClient);
}
}
[PunRPC]
private void RPC_LoadedGameScene () {
Debug.Log ("Playerss in Room: " + playersInRoom);
Debug.Log ("PlayerList.Length: " + PhotonNetwork.PlayerList.Length);
if (playersInRoom == PhotonNetwork.PlayerList.Length) {
PV.RPC ("RPC_CreatePlayer", RpcTarget.All);
}
}
[PunRPC]
private void RPC_CreatePlayer () {
PhotonNetwork.Instantiate (Path.Combine ("PhotonPrefabs", "PhotonNetworkPlayer"), transform.position, Quaternion.identity, 0);
}
}
Comments
Post a Comment