Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post. |
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 のサーバーとクライアントの両方を、同じ処理で同時に実行することはできないので注意してください。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.