Why is Photon player being instantiated twice?
Hi Everyone,
I have a really quick question. The script is working except it instantiates the player twice and I cannot figure out why. Here is the outline of the script: 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
I can't figure out why double of every player are being instantiated.
Thanks!
There are is no other game object with this script attached to it either.
Here is my script:
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);
}
}
Your answer
Follow this Question
Related Questions
Unity [PUN] New Instantiated players cannot see previously instantiated players 0 Answers
I get an error message every time i run this script? Any ideas? 0 Answers
i can't see other player with photon cloud server,I Can't see each other player in photon cloud 2 Answers
Keeping an object in a multiplayer scene, when a player joins. 3 Answers
C# Photon Networking - Preventing duplicate GameObjects from spawning on Join. 1 Answer