注意 UNet は非推奨となり、今後 Unity から削除される予定です。新しいシステムが開発中です。詳細は ブログ と FAQ を参照してください。 |
Network Discovery コンポーネント を使用すると Unity のマルチプレイヤーゲームがローカルネットワーク (LAN) 上で互いを見つけあうことが可能になります。つまり、プレイヤーが LAN 上のゲームに接続するためにホストの IP アドレスを調べる必要がありません。Network Discovery はインターネット上では利用できません。インターネットベースのゲームに関しては、MatchMaker を参照してください。
Network Discovery コンポーネントは、その存在をブロードキャストし、他の Network Discovery コンポーネントからのブロードキャストをリッスンし、オプションで Network Manager を使用してマッチングゲームに参加できます。Network Discovery コンポーネントは、ネットワークトランスポート層の UDP ブロードキャスト機能を使用します。
Network Discovery を使用するには、シーン内に空のゲームオブジェクトを作成し、そこに Network Discovery コンポーネントを加えてください。
Network Manager HUD 同様、Network Discovery コンポーネントにも制御のためのデフォルト GUI が提供されています。これは、ゲームのリリース前には独自の正式なGUI に差し替えることを前提とした、開発用の一時的なものです。Network Discovery GUI を通してゲームに参加できるようにするには、シーンに Network Manager コンポーネントも必要です。ゲームを開始するときに、Network Discovery GUI (ゲームビューで表示) の Initialize Broadcast ボタンを押してブロードキャストし、ローカルネットワーク上の他のゲームを探し始めます。
Network Discovery コンポーネントはサーバーモード (GUI の Start Broadcasting ボタンをクリックしてアクティベートします) でも、クライアントモード (GUI の Listen for Broadcast ボタンをクリックしてアクティベートします) でも実行できます。
サーバーモード の場合は、Network Discovery コンポーネントはインスペクターで指定したポートのネットワークを通してブロードキャストメッセージを送信します。このメッセージにはゲームの Broadcast Key と Broadcast Version が含まれています。Broadcast Key と Broadcast Version には、どのような値でも設定できます。これらの役割は、ゲームの特定のバージョンとリリースを明らかに示して、異なる種類のゲームに参加しようとするなどの矛盾を避けることです。古いバージョンのゲームに接続できない新しいビルドをリリースする場合は、Broadcast Key 値を変える必要があります。マシンがゲームをホスティングしている場合には、コンポーネントはサーバーモードで実行する必要があります。デフォルトの GUI を使用していない場合にコンポーネントをサーバーモードで実行するには、StartAsServer() 関数を呼び出す必要があります。
クライアントモード の場合は、コンポーネントは指定のポートのブロードキャストメッセージを待機します。メッセージが受信され、メッセージ内の Broadcast Key が Network Discovery コンポーネント内の Broadcast Key と一致すると、ゲームがローカルネットワーク上で参加可能であることを意味します。デフォルトの GUI を使用していない場合にコンポーネントをクライアントモードで実行するには、StartAsClient() 関数を呼び出す必要があります。
クライアントモードで、デフォルトの GUI を使用してブロードキャストを待機しているとき、もし、ローカルネットワーク上でゲームが見つかった場合は、クライアントのユーザーがゲームに参加するためのボタンが表示されます。このボタンには Game at: のラベルと、その後にホストの IP アドレスが示されます。
Network Discovery コンポーネントには、ブロードキャストメッセージを受信したことを知らせる仮想関数があります。
public class MyNetworkDiscovery: NetworkDiscovery {
public override void OnReceivedBroadcast(string fromAddress, string data)
{
Debug.Log("Received broadcast from: " + fromAddress+ " with the data: " + data);
}
}
詳しい情報は、スクリプトリファレンスの NetworkDiscovery を参照してください。Network Discovery のサーバーとクライアントの両方を、同じ処理で同時に実行することはできないので注意してください。