////////NetworkManager Script:
 
 var player : Transform;
 var registeredName : string = "somekindofuniquename";
 var refreshRequestLength : float = 3.0f;
 var hostData : HostData[];
 var chosenGameName : string = "";
 var myPlayer : NetworkPlayer;
 
 function StartServer(){
  Network.InitializeServer (16, Random.Range(2000,2500),!Network.HavePublicAddress());
  MasterServer.RegisterHost(registeredName,chosenGameName);
 }
 
 function OnServerInitialized(){ 
  if(Network.isServer){
   myPlayer = Network.player;
   makePlayer(myPlayer);
  }
 }
 function OnConnectedToServer() {
  myPlayer = Network.player;
  networkView.RPC("makePlayer", RPCMode.Server, myPlayer);
 }
 @RPC
 function makePlayer(NetworkPlayer : thisPlayer){
  var newPlayer : Transform = Network.Instantiate (player, transform.position, transform.rotation, 0) as Transform;
  if (thisPlayer != myPlayer) {
   networkView.RPC ("enableCamera", thisPlayer, newPlayer.networkView.viewID);
  }
  else{
   enableCamera(newPlayer.networkView.viewID);
  }
 }
 @RPC
 function enableCamera(NetworkViewID : playerID){
  var players : GameObject[];
  players = GameObject.FindGameObjectsWithTag ("Player");
  for(var thisPlayer : GameObject in players){
   if(thisPlayer.networkView.viewID == playerID){
    thisPlayer.GetComponent(Movement).haveControl = true;
    var myCamera : Transform = thisPlayer.transform.Find("Camera");
    myCamera.camera.enabled = true;
    myCamera.camera.GetComponent(AudioListener).enabled = true;
    break;
   }
  }
 }
 function RefreshHostList (){
  MasterServer.RequestHostList (registeredName);
  var timeEnd : float = Time.time + refreshRequestLength;
  while (Time.time < timeEnd) {
   hostData = MasterServer.PollHostList();
   yield WaitForEndOfFrame();
  }
 }
 
 function OnGUI(){
  if (Network.isClient || Network.isServer) {
   return;
  }
  if(chosenGameName == ""){
   GUI.Label(new Rect(Screen.width/2 - Screen.width/10, Screen.height/2 - Screen.height/20, Screen.width/5,Screen.height/20), "Game Name");
  }
  chosenGameName = GUI.TextField(new Rect(Screen.width/2 - Screen.width/10, Screen.height/2 - Screen.height/20, Screen.width/5,Screen.height/20), chosenGameName, 25);
  if (GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2, Screen.width/5,Screen.height/10), "Start New Server")) {
   StartServer();
  }
  if (GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2 + Screen.height/10, Screen.width/5,Screen.height/10), "Find Servers")) {
   RefreshHostList();
  }
  if (hostData != null) {
   for(var i = 0; i < hostData.Length; i++){
    if(GUI.Button (new Rect (Screen.width/2 - Screen.width/10, Screen.height/2 + ((Screen.height/20)*(i+4)), Screen.width/5,Screen.height/20), hostData[i].gameName)) {
     Network.Connect(hostData[i]);
    }
   }
  }
 }
//////////// Movement Script
 var moveSpeed : int = 8;
 var horiz : float = 0;
 var vert : float = 0;
 var haveControl : boolean = false;
 function FixedUpdate(){
  if(haveControl){
   vert = Input.GetAxis("Vertical");
   horiz = Input.GetAxis("Horizontal");
   var  newVelocity : Vector3 = (transform.right * horiz * moveSpeed) + (transform.forward * vert * moveSpeed);
   var myVelocity : Vector3 = rigidbody.velocity;
   myVelocity.x = newVelocity.x;
   myVelocity.z = newVelocity.z;
   if(myVelocity != rigidbody.velocity){
    if(Network.isServer){
     movePlayer(myVelocity);
    }
    else{
     networkView.RPC("movePlayer", RPCMode.Server, myVelocity);
    }
   }
  }
 }
 @RPC
 function movePlayer(Vector3 : playerVelocity){
  rigidbody.velocity = playerVelocity;
  networkView.RPC("updatePlayer", RPCMode.OthersBuffered, transform.position);
 }
 @RPC
 function updatePlayer(Vector3 : playerPos){
  transform.position = playerPos;
 }
}