【Unity】Lobbyを使った通信テスト


前回はUNET (Network Manager) を使って通信をしようと試みた。

この機能を使うと簡単に通信ができたがホストが通信を始めた瞬間にゲームスタートになり、クライアントが通信するとそこにスポーンする形になってしまう(MMOみたいな感じ)。

 

そこで一旦ロビーに集めて、人数がそろったら始める形式に変更する。

そのためのクラスが NetworkLobbyManagerとして用意されている。

 

最初は1から設定していたけど、Network Managerとも勝手が違って心が折れた。

公式提供のフリーアセットがあったのでそれを使わせてもらうことにした(Tanks!とかを参考にしてたけど、それもこのアセットを利用していた)。

 

最低限の使い方であれば4ステップでできる

  1. タイトル・ロビー用シーンとゲームシーンを用意する(BuildSettingsに登録する
  2. Lobby > Prefab > LobbyManagerを取り出す
  3. Manager の Lobby Scene と Play Scene に用意したシーンをアタッチ
  4. Manager の Game Player Info に Lobby > Prefab > PlayerInfoをアタッチ

 

 

「PLAY AND HOST」でホスト参加して、他はIP入れてJOINすれば通信できます。

 

現状だとlocalhostの通信になるので適切なIPとなるように変更しないといけない。

LobbyMainMenu.cs の OnClickHost でIPを取得するコードを追加しました。

これで同一ネットワーク内なら複数端末で集まることができるようになりました。

 

SIM通信も同じようにできるのかと思ったけど無理でした。

セキュリティ(ファイアウォールとか)か権限不足か、そもそもネットワークに関して勘違いがあるのか。

とりあえず今回はここまで。

 

追記

IPを取得するためにごちゃごちゃしてたけど Network.player.ipAddress で取得できるみたいです。

追記2

このへんを見て色々と必要なことがわかってないと理解した。どうするかな。

プライベートアドレスはインターネットから直接アクセスすることができない IP アドレス(ネットワークアドレス変換( Network Address Translation )、あるいは使用する手法から NAT アドレスと呼ばれます)です。簡単に説明すると、プライベートアドレスはローカルルーターを通過し、そこでアドレスがパブリックアドレスに変換されます。これにより、多くのプライベートアドレスを持ったマシンはひとつのパブリックアドレスを使用してインターネットで通信できます。これは誰かインターネット上で他のプライベートアドレスと通信を始めたい場合でなければ何ら問題はありません。この通信はルーターのパブリックアドレスを通して行われる必要があり、次にプライベートアドレスにメッセージを渡す必要があります。NAT パンチスルーというテクニックを使って、ファシリテータ( Facilitator )として知られる共有サーバーを仲介としてプライベートアドレスをパブリックアドレスから到達できるようにします。プライベートアドレスがまずファシリテータにコンタクトを行い、そこからローカルルーターに穴を空けることで実現されます。( NAT パンチスルーの詳細は現実にはより複雑なものであることに注意してください)
You can get another player to directly connect to another player that is not on the same local network but you need to perform port forwarding on each computer. Players can perform port forwarding through their router settings but you don’t want your player to go through this. You can do port-forwarding from C# script but it is complicated if you don’t know anything about networking. There are many C# libraries that can do this so that you have to re-invent a wheel.

Once you get port forwarding working, you can then use the Unity standard API to directly connect to another player in another network.

 


コメントを残す

メールアドレスが公開されることはありません。