2017-09-08 7 views
2

ここでUnity Networkingでマルチプレイヤーゲームを作成しています。私が望むのは、サーバーとクライアントの両方が接続されているときにゲームを開始することです。私のゲームでは、2人のプレイヤーがゲームをホストするサーバーとして動作し、もう1人はサーバーIPAddressでそのホストに接続するクライアントとして動作します。だから両方が接続されてプレイする準備ができたら、私はゲームを開始したい。誰も私を助けることができる私は両方が接続されていることを知ることができます。クライアントとサーバがUnity Networkingで互いに接続されていることを知る方法

ここに私が使っているコードがあります。

public NetworkManager manager; 

public void startServerr() 
{ 
NetworkServer.Listen(9000); 
    NetworkServer.RegisterHandler(MsgType.Connect, OnConnected); 
    NetworkServer.RegisterHandler(MsgType.Disconnect, OnDisconnected); 
    NetworkServer.RegisterHandler(MsgType.Error, OnError); 
    manager.StartHost(); 
} 

public void connectToServer() 
{ 
    manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP"); 
    manager.StartClient(); 
} 

public void OnConnected(NetworkMessage netMsg) 
{ 
    Debug.Log("Client Connected"); 
} 

public void OnDisconnected(NetworkMessage netMsg) 
{ 
    Debug.Log("Disconnected"); 
} 

public void OnError(NetworkMessage netMsg) 
{ 
    Debug.Log("Error while connecting"); 
} 

答えて

0

最初に、実際に接続しようとする前に、ユニティネットワークに関するすべてのドキュメントを読むことをお勧めします。これを済ませたら、このリクエストをどのように扱うべきかを知っておく必要があります。あなたがここで分からなければ、ここでこの特定の要求を処理する方法があります。

最初に、OnConnected(NetworkMessage netMsg)という方法を使用して、サーバーにすべての着信接続を処理させる必要があります。 サーバーに接続されている個々のプレイヤーを認識できる必要があります。 これで、準備完了ボタンを作成し、クリックするとサーバーの準備完了ステータスを送信するだけで済みます。接続されているすべてのプレーヤーがisReadyメッセージをサーバーに送信すると、ゲームを開始できます。これは、サーバーから接続されたすべてのクライアントにメッセージを送信することによって行われます。

ご希望の場合は、ご質問ください。

+0

編集内容を確認してください –

2

あなたは現在あなたがイベントのmanual登録を必要とするNetworkServerNetworkClientNetworkManagerを使用することを好む場合は、スクリプトがNetworkManagerから継承しなければなりません... NetworkManagerを使用しています。

NetworkManagerから継承したら、OnClientConnectOnServerConnect関数をオーバーライドして使用して、クライアントがサーバーに接続しているときとサーバーがクライアントに接続しているときを確認できます。ここで

は一例です:

public class NetTest : NetworkManager 
{ 
    private NetworkManager manager; 

    public void startServerr() 
    { 
     manager = this; 
     manager.StartHost(); 
    } 

    public void connectToServer() 
    { 
     //manager.networkAddress = PlayerPrefs.GetString("oppPlayerIP"); 
     manager.StartClient(); 
    } 

    public override void OnClientConnect(NetworkConnection conn) 
    { 
     //base.OnClientConnect(conn); 
    } 

    public override void OnClientDisconnect(NetworkConnection conn) 
    { 
     //base.OnClientDisconnect(conn); 
    } 
    public override void OnServerConnect(NetworkConnection conn) 
    { 
     //base.OnServerConnect(conn); 
    } 

    public override void OnServerDisconnect(NetworkConnection conn) 
    { 
     //base.OnServerDisconnect(conn); 
    } 
} 

あなたは公共の機能部hereに複数のネットワークコールバック関数を見つけることができます。

+0

ネットワークマネージャのメソッドについて知っているように、クライアントでOnClientConnectが起動されています。 OnServerConnectがサーバー上で起動されます。しかし、私が望むのは、両方の方法で単一のメソッドを起動することです。 –

+0

** "しかし、私が望むのは、両方の方法で単一のメソッドを起動することです。" **私が答えを書くとき、私は質問のタイトルと本文にあるものに答えるために書き込みます。質問が明確でない場合は、回答を追加する前に詳細を聞いてコメントします。私の答えはあなたの質問に答えました* "クライアントとサーバーが接続されていることを知っています" * ...あなたはあなたが探しているものを得るために**簡単なブール変数を使うことができます。ハッピーコーディング! – Programmer

+0

「クライアントとサーバーが互いに接続されていることを知っている**」という質問を見てください。 「誰も私を助けて、どうやって両方がつながっているかを知ることができますか」と言いました。 –

関連する問題