How do I connect to the MasterServer using Unity 3.x?

Does anyone have a simple script/test demo that I can use to see if I can register a game to the MasterServer? I've ran demos from Noesis tutorials, M2H tutorials, and Unity's Network Tutorial which I was able to get working in Unity 2.6 but I can't get any of them to work in Unity 3.x.

Any help would be apprciated!

Just in case anyone else is having an issue connecting/testing with Unity's Master Server here's my code (not sure how to get it to format correctly):

INSTRUCTIONS:

1) Copy and paste all this code in to a javascript file and attach to a empty gameobject.

2) Change the name of the game

3) Confirm your project "Runs in Background" is checked; Edit->Project Settings->Player->"Runs in Background"

4) Build the game (it should only be the empty game object with this script attached and the "Main Camera")

5) Run multiple instances of the game (one can be the server and the other can be the client)

DontDestroyOnLoad(this);

var gameName = "You must change this";

var serverName : String = "Joe Blow's Game";

var serverTagline : String = "l33t game for all!";

var serverPort = 25002;

var numberOfPlayers : int = 32;

private var playerCount: int = 0;

private var timeoutHostList = 0.0;

private var lastHostListRequest = -1000.0;

private var hostListRefreshTimeout = 10.0;

private var natCapable : ConnectionTesterStatus = ConnectionTesterStatus.Undetermined;

private var filterNATHosts = false;

private var probingPublicIP = false;

private var doneTesting = false;

private var timer : float = 0.0;

private var windowRect = Rect (Screen.width-300,0,300,100);

private var hideTest = false;

private var testMessage = "Detetcting NAT capabilities...";

// Enable this if not running a client on the server machine

//MasterServer.dedicatedServer = true;

function OnFailedToConnectToMasterServer(info: NetworkConnectionError)

{

Debug.Log(info);

}

function OnFailedToConnect(info: NetworkConnectionError)

{

Debug.Log(info);

}

function OnGUI ()

{

windowRect = GUILayout.Window (0, windowRect, MakeWindow, "Server Controls");

}

function Awake ()

{

// Start connection test

natCapable = Network.TestConnection();

// What kind of IP does this machine have? TestConnection also indicates this in the

// test results

if (Network.HavePublicAddress())

    Debug.Log("This machine has a public IP address");

else

    Debug.Log("This machine has a private IP address");

}

function MakeWindow (id : int)

{

var hideNumberOfPlayers = !Network.isServer;

if (!hideNumberOfPlayers) 

{

    GUILayout.Label("Number of player's connected: " + playerCount);

}

hideTest = GUILayout.Toggle(hideTest, "Hide test info");

if (!hideTest) 

{

    GUILayout.Label(testMessage);

    if (GUILayout.Button ("Retest connection"))

    {

        Debug.Log("Redoing connection test");

        probingPublicIP = false;

        doneTesting = false;

        natCapable = Network.TestConnection(true);

    }

}

if (Network.peerType == NetworkPeerType.Disconnected)

{

    GUILayout.BeginHorizontal();

    GUILayout.Space(10);

    // Start a new server

    if (GUILayout.Button ("Start Server"))

    {

        // Use NAT punchthrough if no public IP present

        var useNat = !Network.HavePublicAddress();

        Network.InitializeServer(numberOfPlayers, serverPort, useNat);

        MasterServer.RegisterHost(gameName, serverName, serverTagline);

    }

    // Refresh hosts

    if (GUILayout.Button ("Refresh available Servers") || Time.realtimeSinceStartup > lastHostListRequest + hostListRefreshTimeout)

    {

        MasterServer.RequestHostList (gameName);

        lastHostListRequest = Time.realtimeSinceStartup;

    }

    GUILayout.FlexibleSpace();

    GUILayout.EndHorizontal();

    GUILayout.Space(5);

    var data : HostData[] = MasterServer.PollHostList();

    for (var element in data)

    {

        GUILayout.BeginHorizontal();

        // Do not display NAT enabled games if we cannot do NAT punchthrough

        if ( !(filterNATHosts))//&& element.useNat) )

        {

            var name = element.gameName + " " + element.connectedPlayers + " / " + element.playerLimit;

            GUILayout.Label(name);  

            GUILayout.Space(5);

            var hostInfo = "[";

            // Here we display all IP addresses, there can be multiple in cases where

            // internal LAN connections are being attempted. In the GUI we could just display

            // the first one in order not confuse the end user, but internally Unity will

            // do a connection check on all IP addresses in the element.ip list, and connect to the

            // first valid one.

            for (var host in element.ip)

            {

                hostInfo = hostInfo + host + ":" + element.port + " ";

            }

            hostInfo = hostInfo + "]";

            //GUILayout.Label("[" + element.ip + ":" + element.port + "]"); 

            GUILayout.Label(hostInfo);  

            GUILayout.Space(5);

            GUILayout.Label(element.comment);

            GUILayout.Space(5);

            GUILayout.FlexibleSpace();

            if (GUILayout.Button("Connect"))

            {

                Network.Connect(element.ip, element.port);          

            }

        }

        GUILayout.EndHorizontal();  

    }

}

else

{

    if (GUILayout.Button ("Disconnect"))

    {

        Network.Disconnect();

        MasterServer.UnregisterHost();

    }

    GUILayout.FlexibleSpace();

}

GUI.DragWindow (Rect (0,0,1000,1000));

}

function Update()

{

// If test is undetermined, keep running

if (!doneTesting) 

{

    TestConnection();

}   

}

function TestConnection()

{

// Start/Poll the connection test, report the results in a label and 

// react to the results accordingly

connectionTestResult = Network.TestConnection();

switch (connectionTestResult) {

    case ConnectionTesterStatus.Error: 

        testMessage = "Problem determining NAT capabilities";

        doneTesting = true;

        break;

    case ConnectionTesterStatus.Undetermined: 

        testMessage = "Undetermined NAT capabilities";

        doneTesting = false;

        break;

    case ConnectionTesterStatus.PublicIPIsConnectable:

        testMessage = "Directly connectable public IP address.";

        useNat = false;

        doneTesting = true;

        break;

    // This case is a bit special as we now need to check if we can 

    // circumvent the blocking by using NAT punchthrough

    case ConnectionTesterStatus.PublicIPPortBlocked:

        testMessage = "Non-connectble public IP address (port " + 

            serverPort +" blocked), running a server is impossible.";

        useNat = false;

        // If no NAT punchthrough test has been performed on this public 

        // IP, force a test

        if (!probingPublicIP) {

            connectionTestResult = Network.TestConnectionNAT();

            probingPublicIP = true;

            testStatus = "Testing if blocked public IP can be circumvented";

            timer = Time.time + 10;

        }

        // NAT punchthrough test was performed but we still get blocked

        else if (Time.time > timer) {

            probingPublicIP = false;         // reset

            useNat = true;

            doneTesting = true;

        }

        break;

    case ConnectionTesterStatus.PublicIPNoServerStarted:

        testMessage = "Public IP address but server not initialized, "+

            "it must be started to check server accessibility. Restart "+

            "connection test when ready.";

        break;

    case ConnectionTesterStatus.LimitedNATPunchthroughPortRestricted:

        testMessage = "Limited NAT punchthrough capabilities. Cannot "+

            "connect to all types of NAT servers.";

        useNat = true;

        doneTesting = true;

        break;

    case ConnectionTesterStatus.LimitedNATPunchthroughPortRestricted:

        testMessage = "Limited NAT punchthrough capabilities. Cannot "+

            "connect to all types of NAT servers. Running a server "+

            "is ill advised as not everyone can connect.";

        useNat = true;

        doneTesting = true;

        break;

    case ConnectionTesterStatus.LimitedNATPunchthroughSymmetric:

        testMessage = "Limited NAT punchthrough capabilities. Cannot "+

            "connect to all types of NAT servers. Running a server "+

            "is ill advised as not everyone can connect.";

        useNat = true;

        doneTesting = true;

        break;

    case ConnectionTesterStatus.NATpunchthroughAddressRestrictedCone:

    case ConnectionTesterStatus.NATpunchthroughFullCone:

        testMessage = "NAT punchthrough capable. Can connect to all "+

            "servers and receive connections from all clients. Enabling "+

            "NAT punchthrough functionality.";

        useNat = true;

        doneTesting = true;

        break;

    default: 

        testMessage = "Error in test routine, got " + connectionTestResult;

}

if (doneTesting) 

{

    if (useNat)

        shouldEnableNatMessage = "When starting a server the NAT "+

            "punchthrough feature should be enabled (useNat parameter)";

    else

        shouldEnableNatMessage = "NAT punchthrough not needed";

    testStatus = "Done testing";

}

}

function OnPlayerConnected(player: NetworkPlayer)

{

playerCount += 1;

Debug.Log("Player " + playerCount + 

          " connected from " + player.ipAddress + 

          ":" + player.port);

// Populate a data structure with player information ...

}

function OnPlayerDisconnected(player: NetworkPlayer)

{

playerCount -= 1;

Debug.Log("Clean up after player " +  player);

Network.RemoveRPCs(player);

Network.DestroyPlayerObjects(player);

}