ネットワークリファレンスに旧が付いた
いつの間にかUnityのネットワーキングの概要(旧)に旧が付いていたので、調べてみました。
既存のNetworkViewの問題点
いままでNetworkViewはRPC(リモートファンクションコール)使えたり便利だったけど、ネットワーク周りが弱かった。固定IPあることが前提な設計のため、特にスマホの場合NAT超えできなかったり、docomoとソフバンで繋がらない問題が発生していた。またスマホがホストの場合同時接続数が10人超えるとスペック不足が顕著になり、大規模マルチプレイが実装できなかった。
開発者はどう対応していたか
P2Pでの実装を諦めて、自社中央サーバ立てたり、外部サービスのPhotonを利用してスマホ同士を接続していました。例えばコロプラの白猫の例だと裏はnodejsでパケット交換を仲介しています。
UNETってナニモノ?Unity側が動いた
旧ネットワークリファレンスには『Unity5.1からはUNETの使用を推奨』と記述されています。UNETとは何者でしょうか?
UNETとは簡単に言うとUnityが公開しているインターネットサービスであるUnityMultiplayerサービスを利用するためのクラスです。いままでのNetworkViewのようなP2Pで相互接続できない問題を、あいだにUnityが提供する中間サーバを利用することで解消を計っています。UNET詳細についてはこちらの公式リファレンスを読むといいと思います。UnityMultiplayerの内容はPhotonと同等で、かなり意識しているなーと私は感じています。戦略としては模倣でしょうか。
サービスとして成功するのか
ゲーム向けエンジンを作っている会社(Unity)がネットワーク周り強いかというと未知数。実績もないから来年の冬くらいまでは様子見が適切だと思います。developerには公開されていないAPIが利用できたりUnityの仕様自体に手を入れられるので成功する余地は十分ありそうです。
スマホのマルチプレイを作るとここで躓いた
WebAPIだとOAuth2.0つかって認証できるけど、TCP/IP通信の場合認証で困ります。マッチングサーバに不正アクセスされたりBotが流行したらどうしようとなりました。これはPhotonでも同じことが起こります。
またスマホ同士のパケットを交換するために、ゲーム開発者にいきなりTCP/IPサーバを書いてといっても書ける人/書いたことある人が居なくて困り果てます。TCP/IPサーバをメンテする問題も発生しそうです。
じゃあ自社でTCP/IPサーバ書くの大変だから、外部サービスを利用しようとなると実績あるのはPhotonしかありません。将来UnityMultPlayerも選択肢に入るようになるとなかなか良い感じになりそうですね。