Hey Folks
I’m having a hard time getting online multi player up and running. I followed a tutorial on UnityCookie.com. For some reason I’m unable to connect to the other Users “room”. When I try to connect Unity throws the error message: “Are you sure you are able to connect to the Server?”
I’ve been reading up stuff on this issue for about a week now and I cannot find any solution. I’m using a UMTS stick to connect to the internet, so there is no router that blocks the connections. I’m able to play Unity Multiplayer games online so my Firewall is not blocking in coming connections either.
UnityCookie.com
#pragma strict
var playerPrefab : GameObject;
var spawnPoint : Transform;
var gameName : String = "TestGame";
private var refreshing : boolean;
private var hostData : HostData[];
private var buttonX : float;
private var buttonY : float;
private var buttonHeight : float;
private var buttonWidth : float;
// menu booleans
var menuMain : boolean = true;
var menuCreateServer : boolean = false;
var menuOptions : boolean = false;
var menuHelp : boolean = false;
var inGame : boolean = false;
// menu windows
var windowMainMenu : Rect = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
var windowCreateServer : Rect = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
var windowOptions : Rect = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
var windowHelp : Rect = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
// window specs
var screenOffset = 20;
var screenHeight : float = 550;
var screenWidth : float = 670;
private var menuWidth = screenWidth - screenOffset*2;
private var menuHeight = screenHeight -screenOffset*2;
//scrollview
var scrollPosition : Vector2 = Vector2(20,150);
// host options
var advancedOptions : boolean = false;
var hostedGameName: String = "Enter name here ...";
var portString : String = "Enter port here...";
var maxPlayers : int = 8;
static var port : int = 80;
function Start ()
{
buttonX = ((menuWidth/2)-50);
buttonY = 30;
buttonHeight = 40;
buttonWidth = 100;
windowMainMenu = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
windowCreateServer = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
windowOptions = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
windowHelp = Rect(screenOffset,screenOffset,screenWidth-screenOffset*2,screenHeight-screenOffset*2);
}
function StartServer()
{
var useNat = !Network.HavePublicAddress;
Network.InitializeServer(maxPlayers,25001,useNat);
//Network.InitializeServer(maxPlayers,port,!Network.HavePublicAddress);
MasterServer.RegisterHost(gameName, hostedGameName, "This is a TestGame");
}
function refreshHostList()
{
MasterServer.RequestHostList(gameName);
refreshing = true;
//MasterServer.PollHostList();
}
function Update ()
{
//Debug.Log(port);
if(refreshing)
{
if(MasterServer.PollHostList().Length > 0)
{
refreshing = false;
Debug.Log(MasterServer.PollHostList().Length);
hostData = MasterServer.PollHostList();
}
}
}
function spawnPlayer()
{
Debug.Log("Spawn");
Network.Instantiate(playerPrefab,spawnPoint.position, Quaternion.identity,0);
}
// Messages
function OnServerInitialized()
{
Debug.Log("Server Initialized!");
spawnPlayer();
}
function OnConnectedToServer()
{
spawnPlayer();
}
// Debug if unable to connect to server
function OnFailedToConnect(error: NetworkConnectionError)
{
Debug.Log("Could not connect to server: "+ error);
}
// Debug ifconnection to server is lost
function OnDisconnectedFromServer(info : NetworkDisconnection) {
if (Network.isServer)
{
Debug.Log("Local server connection disconnected");
menuMain = true;
menuCreateServer = false;
menuOptions = false;
menuHelp = false;
inGame = false;
}
else
{
if (info == NetworkDisconnection.LostConnection)
{
Debug.Log("Lost connection to the server");
menuMain = true;
menuCreateServer = false;
menuOptions = false;
menuHelp = false;
inGame = false;
}
else
{
Debug.Log("Successfully diconnected from the server");
menuMain = true;
menuCreateServer = false;
menuOptions = false;
menuHelp = false;
inGame = false;
}
}
}
function OnMasterServerEvent(mse : MasterServerEvent)
{
if(mse == MasterServerEvent.RegistrationSucceeded)
{
Debug.Log("Registered Server");
}
}
function OnPlayerDisconnected(player : NetworkPlayer)
{
Network.RemoveRPCs(player,0);
Network.DestroyPlayerObjects(player);
}
// GUI
function OnGUI()
{
// menu logic
if (menuMain !menuCreateServer !menuOptions !menuHelp !inGame)
{
windowMainMenu = GUI.Window (1, windowMainMenu, WindowMainMenu,"Main Menu");
}
if (!menuMain menuCreateServer !menuOptions !menuHelp !inGame)
{
windowCreateServer = GUI.Window (2, windowCreateServer, WindowCreateServer,"Create a Game");
}
if (!menuMain !menuCreateServer menuOptions !menuHelp !inGame)
{
windowOptions = GUI.Window (3, windowOptions, WindowOptions,"Options");
}
if (!menuMain !menuCreateServer !menuOptions menuHelp !inGame)
{
windowHelp = GUI.Window (4, windowHelp, WindowHelp,"How to play");
}
// ingame HUD
if (!menuMain !menuCreateServer !menuOptions !menuHelp inGame)
{
}
}
// main menu
function WindowMainMenu(windowID :int)
{
if(!Network.isClient !Network.isServer)
{
if(GUI.Button(Rect(buttonX,buttonY,buttonWidth,buttonHeight),"Create Game"))
{
//Debug.Log("Starting Server");
//StartServer();
menuMain = false;
menuCreateServer = true;
}
if(GUI.Button(Rect(buttonX,buttonY*1.2+buttonHeight,buttonWidth,buttonHeight),"Refresh Server"))
{
Debug.Log("Refreshing Server");
refreshHostList();
}
GUI.Box(Rect(20,150,590,200),"");
if(hostData)
{
// scrollview for found servers
GUILayout.BeginScrollView(scrollPosition,GUILayout.Width(590),GUILayout.Height(600));
for ( var i : int = 0; i < hostData.length; i++)
{
GUI.Box(Rect(20,150+buttonHeight*i,550-buttonWidth,buttonHeight),"Game name: "+hostData[i].gameName+" - Players connected: "+hostData[i].connectedPlayers+"\n"+" IP:"+hostData[i].ip+" Port:"+hostData[i].port);
if(GUI.Button(Rect(570-buttonWidth,150+(buttonHeight*i),buttonWidth,buttonHeight),"Join"))
{
Network.Connect(hostData[i]);
inGame = true;
}
}
GUILayout.EndScrollView();
//-> End of ScrollView
}
if(GUI.Button(Rect(510,450,100,40),"Options"))
{
menuMain = false;
menuOptions = true;
}
if(GUI.Button(Rect(20,450,100,40),"How to Play"))
{
menuMain = false;
menuHelp = true;
}
}
}
// create a server menu
function WindowCreateServer(windowID :int)
{
// name the game
GUI.Label(Rect(20,150,120,40),"Name your game: ");
hostedGameName = GUI.TextField(Rect(140,150,200,40),hostedGameName,32);
// adjust number of Players
GUI.Label(Rect(20,200,120,40),"Numbers of players: ");
if(GUI.Button(Rect(140,200,40,40),"-") maxPlayers > 1)
{
maxPlayers -= 1;
}
GUI.Label(Rect(185,200,80,40),""+maxPlayers);
if(GUI.Button(Rect(270,200,40,40),"+") maxPlayers < 16)
{
maxPlayers +=1;
}
// GUI.Label(Rect(20,300,120,40),"Game - Port: ");
// portString = GUI.TextField(Rect(140,300,120,40),""+port);
if(GUI.Button(Rect(menuWidth/2-30,menuHeight-100,100,40),"Start Game"))
{
StartServer();
menuCreateServer = false;
inGame = true;
}
if(GUI.Button(Rect(menuWidth/2-30,menuHeight-50,100,40),"Back"))
{
menuCreateServer = false;
menuMain = true;
}
}
// options menu
function WindowOptions(windowID :int)
{
GUI.Label(Rect(20,20,120,40),"Player color");
playerControlls.redValue = GUI.HorizontalSlider(Rect(20,70,100,20),playerControlls.redValue,0,1);
playerControlls.blueValue = GUI.HorizontalSlider(Rect(20,110,100,20),playerControlls.blueValue,0,1);
playerControlls.greenValue = GUI.HorizontalSlider(Rect(20,150,100,20),playerControlls.greenValue,0,1);
GUI.Label(Rect(20,200,120,40),"Name your player: ");
playerControlls.playerName= GUI.TextField(Rect(140,200,200,40),playerControlls.playerName,32);
if(GUI.Button(Rect(menuWidth/2-50,menuHeight-50,100,40),"Back"))
{
menuOptions = false;
menuMain = true;
}
}
// helpmenu
function WindowHelp(windowID :int)
{
if(GUI.Button(Rect(menuWidth/2-30,menuHeight-50,100,40),"Back"))
{
menuHelp = false;
menuMain = true;
}
}
This is the code I’m using. It is attached to a single object in the scene. Sorry that the code is so long but it is basically the multiplayer menu.
Could you have a look on how I handle the Server functions and tell me whether I made a mistake?
Cheers!
Dawnreaver