- Home /
 
void OnConnectedToServer() is not call
Here my server script
 using UnityEngine;
 using System.Collections;
 
 public class CreateServer : MonoBehaviour {
     public string connectToIp = "127.0.0.1";
     public int connectPort = 25001;
 
     // Use this for initialization
     void Start () {
 
     }
     
     // Update is called once per frame
     void Update () {
     
     }
     void OnGUI(){
         if (Network.peerType == NetworkPeerType.Disconnected) {
             //Ko ket noi , ko la client hay host
             GUILayout.Label ("Connection status : Disconnected");
             //Tao 2 o connect to ip va connect port
             connectToIp = GUILayout.TextField (connectToIp, GUILayout.MinWidth (100));
             connectPort = int.Parse(GUILayout.TextField(connectPort.ToString()));
             //Button connect
             GUILayout.BeginVertical ();
             if (GUILayout.Button ("Start Server")) {
                     //Tao 1 server voi 32 clients su dung port thong qua GUI dien o tren
                     Network.InitializeServer (32, connectPort);
             }
             GUILayout.EndVertical ();
         } else {
             //Neu co connection
             if (Network.peerType == NetworkPeerType.Connecting) {
                 //Thong bao hien thi dang ket noi
                 GUILayout.Label ("Connection status: Connecting");
             }else if (Network.peerType == NetworkPeerType.Server) {
                 //Thong bao hien thi da ket noi
                 GUILayout.Label ("Connection status: Server!");
                 //So luong connection
                 GUILayout.Label ("Connections: " + Network.connections.Length);
                 if (Network.connections.Length >= 1) {
                     //Ping so voi player dau tien
                     GUILayout.Label ("Ping to first player: " + Network.GetAveragePing (Network.connections [0]));
                 }            
             }
             //Tao nut disconnect server
             if (GUILayout.Button ("Disconnect")) {
                 Network.Disconnect (200);
             }
         }
     }
     // NONE of the functions below is of any use in this demo, the code below is only used for demonstration.
     // First ensure you understand the code in the OnGUI() function above.
     
     //Client functions called by Unity
     void OnConnectedToServer() {
         Debug.Log("This CLIENT has connected to a server");    
     }
     
     void OnDisconnectedFromServer(NetworkDisconnection info) {
         Debug.Log("This SERVER OR CLIENT has disconnected from a server");
     }
     
     void OnFailedToConnect(NetworkConnectionError error){
         Debug.Log("Could not connect to server: "+ error.ToString());
     }
     
     
     //Server functions called by Unity
     void OnPlayerConnected(NetworkPlayer player) {
         Debug.Log("Player connected from: " + player.ipAddress +":" + player.port);
     }
     
     void OnServerInitialized() {
         Debug.Log("Server initialized and ready");
     }
     
     void OnPlayerDisconnected(NetworkPlayer player) {
         Debug.Log("Player disconnected from: " + player.ipAddress+":" + player.port);
     }
     
     
     // OTHERS:
     // To have a full overview of all network functions called by unity
     // the next four have been added here too, but they can be ignored for now
     
     void OnFailedToConnectToMasterServer(NetworkConnectionError info){
         Debug.Log("Could not connect to master server: "+ info);
     }
     
     void OnNetworkInstantiate (NetworkMessageInfo info) {
         Debug.Log("New object instantiated by " + info.sender);
     }
     
     void OnSerializeNetworkView(BitStream stream,NetworkMessageInfo info)
     {
         //Custom code here (your code!)
     }
     
     /* 
      The last networking functions that unity calls are the RPC functions.
      As we've added "OnSerializeNetworkView", you can't forget the RPC functions 
      that unity calls..however; those are up to you to implement.
      
      @RPC
      function MyRPCKillMessage(){
         //Looks like I have been killed!
         //Someone send an RPC resulting in this function call
      }
     */
 }
 
               And here is my clients script
 using UnityEngine;
 using System.Collections;
 
 public class ConnectToServer : MonoBehaviour {
     public string connectToIP = "127.0.0.1";
     public int connectPort = 25001;
 
     // Use this for initialization
     void Start () {
         //Application.runInBackground = true;
     }
     
     // Update is called once per frame
     void Update () {
     
     }
 
     void OnGUI () {
         if (Network.peerType == NetworkPeerType.Disconnected) {
             //We are currently disconnected: Not a client or host
             GUILayout.Label ("Connection status: Disconnected");
 
             connectToIP = GUILayout.TextField (connectToIP, GUILayout.MinWidth (100));
             connectPort = int.Parse(GUILayout.TextField (connectPort.ToString ()));
             
             GUILayout.BeginVertical ();
             if (GUILayout.Button ("Connect as client")) {
                 //Connect to the "connectToIP" and "connectPort" as entered via the GUI
                 //Ignore the NAT for now
                 Network.Connect (connectToIP, connectPort);
             }
             GUILayout.EndVertical ();
         } else {
             //We've got a connection(s)!
             if (Network.peerType == NetworkPeerType.Connecting) {
                 GUILayout.Label ("Connection status: Connecting");
             } else if (Network.peerType == NetworkPeerType.Client) {
                 GUILayout.Label ("Connection status: Client!");
                 GUILayout.Label ("Ping to server: " + Network.GetAveragePing (Network.connections [0]));
 
                 Application.LoadLevel("BeginBattle");
             }            
             if (GUILayout.Button ("Disconnect")) {
                 Network.Disconnect (200);
             }
         }
     }
 }
 
               And here is my spawn player scripts
 using UnityEngine;
 using System.Collections;
 
 public class SpawnPlayer : MonoBehaviour {
     public Transform playerPrefab ;
 
     // Use this for initialization
     void Start () {
         //Spawnplayer();
         //Application.runInBackground = true;
     }
     
     // Update is called once per frame
     void Update () {
     
     }
 
     void OnConnectedToServer (){
         Debug.Log ("OnConnectedToServer");
         Spawnplayer();
     }
 
     void OnServerInitialized (){
         Debug.Log ("OnServerInitialized");
         Spawnplayer();
     }
 
     void Spawnplayer(){
         //Spawn khi co mang
         Network.Instantiate(playerPrefab, transform.position, transform.rotation, 0);
         //Spawn khi ko co mang
         //Instantiate (playerPrefab, transform.position, transform.rotation);
     }
 
     void OnPlayerDisconnected(NetworkPlayer player) {
         Debug.Log("Clean up after player " + player);
         Network.RemoveRPCs(player);
         Network.DestroyPlayerObjects(player);
     }
     
     void OnDisconnectedFromServer(NetworkDisconnection info) {
         Debug.Log("Clean up a bit after server quit");
         Network.RemoveRPCs(Network.player);
         Network.DestroyPlayerObjects(Network.player);
         
         /* 
     * Note that we only remove our own objects, but we cannot remove the other players 
     * objects since we don't know what they are; we didn't keep track of them. 
     * In a game you would usually reload the level or load the main menu level anyway ;).
     * 
     * In fact, we could use "Application.LoadLevel(Application.loadedLevel);" here instead to reset the scene.
     */
         Application.LoadLevel(Application.loadedLevel);
     }
 }
 
 
               My problem is my void OnConnectedToServer() in SpawnPlayer.cs is not running , i think i was connect success because line
 Application.LoadLevel("BeginBattle");
 
               pass , and i connect to the server , then why my void OnConnectedToServer() not running , pls help :D
Answer by Robert Carlsson · Apr 29, 2014 at 06:47 AM
From what I can see you're spawning the player then changing level, so unless you use don't destroy on load on the player it won't be there when your scene loads.
OnConnectedToServer is run as fast as you connect, then the GUI Application.LoadLevel gets called since you have a connection. Therefore the gameobject you're spawning is erased when the next scene is loaded.
Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
c# not going to destination on 0 hp 1 Answer
Footstep Script Not Working 2 Answers
Script error help! 1 Answer