topical media & game development

talk show tell print

lib-unity-tutorial-network-m2h-Assets-Tutorial-3-Tutorial-3-Spawnscript.js / js



  /* 
  *  This file is part of the Unity networking tutorial by M2H (http://www.M2H.nl)
  *  The original author of this code is Mike Hergaarden, even though some small parts 
  *  are copied from the Unity tutorials/manuals.
  *  Feel free to use this code for your own projects, drop us a line if you made something exciting! 
  */
  
  #pragma strict
  
  public var playerPrefab : Transform;
  public var playerScripts : ArrayList = new ArrayList();
  
  function OnServerInitialized(){
          //Spawn a player for the server itself
          Spawnplayer(Network.player);
  }
  
  function OnPlayerConnected(newPlayer: NetworkPlayer) {
          //A player connected to me(the server)!
          Spawnplayer(newPlayer);
  }        
  
          
  function Spawnplayer(newPlayer : NetworkPlayer){
          //Called on the server only
          
          var playerNumber : int = parseInt(newPlayer+"");
          //Instantiate a new object for this player, remember; the server is therefore the owner.
          var myNewTrans : Transform = Network.Instantiate(playerPrefab, transform.position, transform.rotation, playerNumber);
          
          //Get the networkview of this new transform
          var newObjectsNetworkview : NetworkView = myNewTrans.networkView;
          
          //Keep track of this new player so we can properly destroy it when required.
          playerScripts.Add(myNewTrans.GetComponent(Tutorial_3_Playerscript));
          
          //Call an RPC on this new networkview, set the player who controls this player
          newObjectsNetworkview.RPC("SetPlayer", RPCMode.AllBuffered, newPlayer);//Set it on the owner
  }
  
  function OnPlayerDisconnected(player: NetworkPlayer) {
          Debug.Log("Clean up after player " + player);
  
          for(var script : Tutorial_3_Playerscript in playerScripts){
                  if(player==script.owner){//We found the players object
                          Network.RemoveRPCs(script.gameObject.networkView.viewID);//remove the bufferd SetPlayer call
                          Network.Destroy(script.gameObject);//Destroying the GO will destroy everything
                          playerScripts.Remove(script);//Remove this player from the list
                          break;
                  }
          }
          
          //Remove the buffered RPC call for instantiate for this player.
          var playerNumber : int = parseInt(player+"");
          Network.RemoveRPCs(Network.player, playerNumber);
          
          
          // The next destroys will not destroy anything since the players never
          // instantiated anything nor buffered RPCs
          Network.RemoveRPCs(player);
          Network.DestroyPlayerObjects(player);
  }
  
  function OnDisconnectedFromServer(info : NetworkDisconnection) {
          Debug.Log("Resetting the scene the easy way.");
          Application.LoadLevel(Application.loadedLevel);        
  }
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.