Donate. I desperately need donations to survive due to my health

Get paid by answering surveys Click here

Click here to donate

Remote/Work from Home jobs

Double of every player is being instantiated (when room count = 2 players instantiated = 4)

Here is the outline of my code:

  1. Waits until enough players join
  2. Once enough players have joined a countdown from 5 seconds starts
  3. 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