Problems establishing online multiplayer

Hey Folks :slight_smile:

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

Hi mate,

Where is the other server physically located ?

Is it on your LAN or localPC or over Public IP ?

Sorted it out :slight_smile: The cause for it not to work was the port forwarding :slight_smile: Cheers!