2016-03-21 6 views
0

私はネットワークに小さな2人のユニティゲームをしようとしています。これはネットワーキングで初めてのことですので、私が間違っていることについて私を修正してください。私は、ゲームのメインメニューで、プレーヤーがFind Matchボタンをクリックすることができるシンプルなマッチメイキングサービスを作ろうとしています。これにより、次の関数が実行されます。リスンポートはすでに使用されていますか? Unityネットワークエラー

private HostData[] hostList; 
private const string typeName = "UniqueGameName"; 
private const string gameName = "RoomName"; 
public void FindMatch() { 
    RefreshHostList(); 
    if (hostList != null) { 
     JoinServer(hostList[0]); 
    } else { 
     StartServer(); 
    } 
} 

この関数では、対応するメソッドが呼び出されます。

private void RefreshHostList() 
{ 
    MasterServer.RequestHostList(typeName); 
} 

void OnMasterServerEvent(MasterServerEvent msEvent) 
{ 
    if (msEvent == MasterServerEvent.HostListReceived) 
     hostList = MasterServer.PollHostList(); 
} 

private void JoinServer(HostData hostData) 
{ 
    Network.Connect(hostData); 
} 

private void StartServer() 
{ 
    Network.InitializeServer(2, 25000, !Network.HavePublicAddress()); 
    MasterServer.RegisterHost(typeName, gameName); 
} 

プレイヤーがFind Matchをクリックすると、ホストリストがリフレッシュされます。ホストを見つけたら、サーバーに参加してマッチを開始します。そうでなければ、それはそれ自身のサーバーを開始し、別のプレーヤーを待つでしょう。これをテストすると、Find Matchをクリックした最初のプレイヤーはサーバーを起動できますが、2番目のプレーヤーはエラーメッセージ "...リッスンポートは既に使用中ですか?"を受け取ります。プログラムをデバッグしてステップ実行すると、最初のプレーヤーがサーバーの作成と登録に成功した場合でも、2番目のプレーヤーのhostListは常にnullになります。

答えて

3

同じマシンで両方のアプリケーションインスタンスを使用していますか?ネットワークポートを一度占有した場合、同じマシン上の同じポート上のサーバーを初期化することはできません。

一般的には、あなたのニーズに合わせてSingalRテクノロジーを調べることをお勧めします。これはウェブソケットを使用しています。

+0

SingalRはユニティで動作しますか? –

+0

SingalRは.NETとUnityで動作します。 – realnero

+0

例 - http://stackoverflow.com/questions/32009293/signalr-websocketsharp-in-unity3d – realnero

関連する問題