【Unity】UNETを本格的に導入する前に知っておいたほうが良かったこと
お久しぶりの記事です。
今回はUnityの5.1から実装されたUnityのネットワーク機能「UNET」を実装する上で予め知っておいたほうが良かったと思ったことや、結局調べるはめになるであろうことを書いていこうと思います。
とはいえ基本的な部分はこちらの記事を読んだほうが早いです。
【Unity9】UNETでマルチプレイヤーなオンラインゲーム開発【UNET1】 - Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご
25回にわたって書かれているので導入としてとても良かったです。
Unity 5.1 から導入された新しいネットワーク機能の UNET について詳しく調べてみた - 凹みTips
こちらではUNETについて詳しく解説されています。
あと細かい仕様とかはここ
Unity - マニュアル: ネットワーキング リファレンス
オープンソースを使う
さて、まずははじめに把握しておくべきだと思うことは、UNETはまだ未完成であるということです。
なのでこの段階で本格的に導入すると割りとめんどくさい事になります。
(そして圧倒的にUNETの日本語の記事は少なかった…)
なので、UNETをそのまま使わず基本的に中身はいじれるようにしておいたほうが吉です。
UNETはこちらのリポジトリでオープンソースとして公開されているのでそれを改造しながら使うべき。
Unity-Technologies / Networking / source / — Bitbucket
エラーに注意
そしてもう一つめんどくさいのがサンプルなどでよく出てくるNetworkManagerとそのHUD、NetoworkTransformを使った超シンプルなサンプルで、ホストになる→ストップ→ホストになるという流れをなんどか繰り返すとエラーで止まります(8月12日現在
)。
どうやら作ったソケットか何かがきちんと破棄されていないらしく、StopServer、StopClientなどを呼ぶだけでは繰り返しのプレイに耐えられません。
ではどうするかというと
NetworkTransport.Shutdown();
NetoworkTransport.init();
の2つをセットで呼べばとりあえず正常に動くようになります。
ServerChangeSceneが謎だった
次に結構長い間挙動が謎だったのがこいつ。
NetworkManager.ServerChangeScene();
なにげに非同期読み込みです。
ロードシーンか何かを挟めば簡単に読み込み画面が作れます。
基本的にはいろいろ揃ってて便利
UNETはHLAPIなのでネットワークゲームを作る上で必要なものがある程度網羅されています。
LANで通信相手を探すNetworkDiscovery
マッチメイキング用のMatchmaker
ロビー用のNetworkLobbyManager
マッチングサーバーを提供してくれるServiceのUnityMultiplayer
この辺りを目的に合わせてうまく使えば結構つくりやすいかなと思います。
Unityのネットワーク機能が出てたので使ってみた現段階の感想としてまだ未完成ということ、日本語の資料がまだまだ少ないこともあって割りと大変でした。
ただ、基本的なところの実装はかなりはやくできるのでGameJamなんかでは結構使いどころがありそうな印象です。