- Home /
Photon Networking Player Control Issue
Using Photon Networking I am creating a multiplayer game that has gone smoothly so far. My issue is that when two or more players join the server, they fight over the controls, they do not respond to the same controls. If I look up on one screen, the other player on a different screen looks to the side. When I move one player, the other player moves. It is super wonky and messed up, any help is appreciated. Here is my code: using UnityEngine; using System.Collections;
public class NetworkManager : MonoBehaviour { public GameObject standbyCamera; SpawnSpot [] spawnSpots;
// Use this for initialization
void Start () {
Connect ();
spawnSpots = GameObject.FindObjectsOfType<SpawnSpot> ();
}
// Update is called once per frame
void Connect () {
PhotonNetwork.ConnectUsingSettings ("1.0");
}
void OnGUI()
{
GUILayout.Label (PhotonNetwork.connectionStateDetailed.ToString ());
}
void OnJoinedLobby()
{
PhotonNetwork.JoinRandomRoom ();
}
void OnPhotonRandomJoinFailed()
{
Debug.Log ("OnPhotonRandomJoinFailed");
PhotonNetwork.CreateRoom (null);
}
void OnJoinedRoom()
{
SpawnMyPlayer ();
}
void SpawnMyPlayer()
{
SpawnSpot mySpawnSpot = spawnSpots [Random.Range (0, spawnSpots.Length)];
GameObject myPlayerGo = (GameObject)PhotonNetwork.Instantiate ("PlayerController", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0);
standbyCamera.SetActive (false);
{
((MonoBehaviour)myPlayerGo.GetComponent ("CharacterMotor")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("MouseLook")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("PlayerShooting")).enabled = true;
myPlayerGo.transform.FindChild ("Main Camera").gameObject.SetActive (true);
}
}
}
form line 35 to line 45. in that area you turn on the components so this instant of the player it being controlled by this client if yo have these components enabled on both instances of the character on 2 difference clients you will get 2 clients trying to control the same character. so make sure that in your prefab you DISABLE the components and let your script enable them. ~Scott
Answer by InfernoZYB · Apr 24, 2015 at 04:49 PM
With this script it is quite simple. Go onto you're prefab and make sure all components are disabled then just replace you're code with this(See if it works, if not comment below and i will double check):
using UnityEngine;
using System.Collections;
public class NetworkManager : MonoBehaviour {
public GameObject standbyCamera;
SpawnSpot [] spawnSpots;
// Use this for initialization
void Start () {
Connect ();
spawnSpots = GameObject.FindObjectsOfType<SpawnSpot> ();
}
// Update is called once per frame
void Connect () {
PhotonNetwork.ConnectUsingSettings ("1.0");
}
void OnGUI()
{
GUILayout.Label (PhotonNetwork.connectionStateDetailed.ToString ());
}
void OnJoinedLobby()
{
PhotonNetwork.JoinRandomRoom ();
}
void OnPhotonRandomJoinFailed()
{
Debug.Log ("OnPhotonRandomJoinFailed");
PhotonNetwork.CreateRoom (null);
}
void OnJoinedRoom()
{
SpawnMyPlayer ();
}
void SpawnMyPlayer()
{
SpawnSpot mySpawnSpot = spawnSpots [Random.Range (0, spawnSpots.Length)];
GameObject myPlayerGo = (GameObject)PhotonNetwork.Instantiate ("PlayerController", mySpawnSpot.transform.position, mySpawnSpot.transform.rotation, 0);
standbyCamera.SetActive (false);
//{ <<< Thats random... and probably not needed
((MonoBehaviour)myPlayerGo.GetComponent ("CharacterMotor")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("FPSInputController")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("MouseLook")).enabled = true;
((MonoBehaviour)myPlayerGo.GetComponent ("PlayerShooting")).enabled = true;
myPlayerGo.transform.FindChild ("Main Camera").gameObject.SetActive (true);
}
}