- Home /
Question by
lordig · Jul 28, 2015 at 10:26 PM ·
c#errornetworking
Choose Player UNet Problem with Client
Hallo There, I want to change my player after login. On Server side it works perfekt. I can switch my player and move around without any problem. But client side says there is a missing reference for the new player...
public void Player1ButtonPress(){
if (!player1) {
NetworkIdentity oldPlayer = GameObject.FindGameObjectWithTag("Dummy").GetComponent<NetworkIdentity>();
NetworkConnection conn = oldPlayer.connectionToClient;
var newPlayer = Instantiate<GameObject>(Player1);
Murray.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
NetworkServer.ReplacePlayerForConnection(conn, newPlayer, 0);
this.gameObject.GetComponent<Camera>().enabled = false;
Player1.GetComponent<PlayerMovement> ().enabled = true;
GameObject.Find("Player1Cam").GetComponent<Camera> ().enabled = true;
Canvas.SetActive(false);
CmdDisableMurrayComponents(true);
} else {
Debug.Log ("Schon gewählt");
}
}
The error seems to be there: NetworkServer.ReplacePlayerForConnection(conn, newPlayer, 0);
Comment
Ins$$anonymous$$d of using 0, copy the playerControllerId from the NetworkIdentity and feed it in to the new one.
Changed 0 tooldPlayer.playerControllerId -> new error:
UnityEngine.Networking.NetworkServer:ReplacePlayerForConnection(NetworkConnection, GameObject, Int16) ChoosePlayer:Player1ButtonPress() (at Assets/Scripts/ChoosePlayer.cs:42) UnityEngine.EventSystems.EventSystem:Update() I edited the script to (short) (tooldPlayer.playerControllerId + 1) now got the old error back:AddPlayer: playerControllerId of -1 is negative
UnityEngine.Networking.NetworkServer.InternalReplacePlayerForConnection (UnityEngine.Networking.NetworkConnection conn, UnityEngine.GameObject playerGameObject, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:1030) UnityEngine.Networking.NetworkServer.ReplacePlayerForConnection (UnityEngine.Networking.NetworkConnection conn, UnityEngine.GameObject player, Int16 playerControllerId) (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:886) ChoosePlayer.Player1ButtonPress () (at Assets/Scripts/ChoosePlayer.cs:42) UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:137) UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:602) UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:744) UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:53) UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44) UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:52) UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269) UnityEngine.EventSystems.EventSystem:Update()NullReferenceException: Object reference not set to an instance of an object