Unity Netcode : local server/clientを接続するときにIP Addressを検索して接続!NetworkDiscovery

Unity

サーバーのIP addressが固定なら良いのですが、テストでは127.0.0.1と完全にローカルで完結するのでそのままで良いのですが。

2人が同じLANに接続した状態では ipアドレスがわからないと

まずは自分の ip addressを取得してみる。

NetworkManager.Singleton.networkAddressというのは使えない模様・・・

Networking.NetworkDiscovery - Unity スクリプトリファレンス
NetworkDiscovery コンポーネントは、Unity ゲームにおいてローカルネットワーク上でお互いを繋げるために使用します。ブロードキャストで Presence と Listen ができ、必要に応じて NetworkManager を使用してマッチングゲームに参加できます。

networkdiscoveryでLAN内のipをチェック

multiplayer-community-contributions/com.community.netcode.extensions/Runtime/NetworkDiscovery at main · Unity-Technologies/multiplayer-community-contributions
Community contributions to Unity Multiplayer Networking products and services. - multiplayer-community-contributions/com.community.netcode.extensions/Runtime/Ne...

netcodeにはnetwork discoveryがないのでこちらを使うそうです。

https://github.com/Unity-Technologies/multiplayer-community-contributions.git?path=/com.community.netcode.extensions

こてを Add package from git url

Netcode for GameObjects Community Extension Package . を追加しました^^

Exampleを見ながら サーバーを探して接続しました!(後ほど説明を追加

netcode for gameobjectsのバージョンも関係ある?

ざっくり手順

A NetworkDiscovery -> StartServer

A NetworkManager -> StartHost

B NetworkDiscovery -> StartClient

B NetworkDiscovery -> ClientBroadcast

順番はどちらが先でも同じですが

B NetworkDiscovery -> ResponseReceived に通知が来るのでその中で

sender.Addressにサーバーのアドレスがわかるのでipとポートを設定して
127.0.0.1をsender.Addressに置き換えます。server(host)のほうは127.0.0.1でok

Unity.Netcode.Transports.UNET.UNetTransport | Unity Multiplayer Networking
Inheritance

UNetTransportのconnectAddress, connectPort

B NetworkManager -> StartClient

で接続OK

A,B NetworkDiscovery -> stopDiscovery で止めます。

NetworkManager, NetworkDiscoveryは同じゲームオブジェクトに。

Discoveryのポートはconnect portとは別。server nameはオリジナルで良いのかな

iPhoneとPCで接続できました^v^v

コメント

タイトルとURLをコピーしました