topical media & game development
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.