概要
スマホゲームでUnityマルチプレイを実現するためには、どうすればよいか。
PhotonSDKとTNetをざっくり斜め読みしたまとめ。
UnityのNetworkViewでそのまま実装した場合の問題点
1.そもそもスマホ同士だと繋がらない場合がある
Unity Network Reference Guideに記載されている通り、中央サーバを持たずスマホ端末の1台をホストとする。ホストの通信環境によっては繋がらない状態になる。具体的にはスマホだと同じLAN上じゃないと安定して繋がらない。
2.ホストが落ちると全員落ちる
通信が不安定なスマホだと結構致命的。
3.権威サーバが存在しないためチートに弱い
ホストがスマホ端末になるためどうしてもチートに弱い構成になります。
4.Remote Function Callの使い勝手が悪い
RFCとはネットワーク越しに相手objectのmethodを実行する機能です。
Unity標準のRFCは1度に同時に1つのパラメータしか送れず、同期できるパラメータが限られています。
大変使い勝手が悪いです。
5.同期したオブジェクトが動くとカクカクする
そのまま実装すると通信相手がワープ移動して見えます。
移動先を予測する移動補完の処理を書く必要があります。
6.オフラインモードなし
オフラインに移行できる設計になっていない。シングルプレイヤーのコードとマルチプレイヤーのコードを別々に実装する必要がある。
Photon Unity Networkingを利用すると
1.ネットワーク構成
Photonクラウドがroomを提供する。ホストが落ちても委譲が可能。繋がらない問題はそもそも発生しない。
2.移動補完機能が最近追加された
昨年末にPhotonUnityNetworking ver1.50がリリースされました。ただ枯れてないため要検証。
3.でもやっぱりチートに弱い
Photonクラウドは通信ハブの機能しか持たないため、ホストのチートには弱い。
対策としてPhotonServerにゲームロジックを実装して、大切なデータはサーバで管理する必要がありそう。
4.大規模アプリの実績あり
聖剣伝説 RISE of MANAはphotonで構築したみたい
5.RFCは拡張済み
PUN Class List
6.オフラインモード有り
シングルプレイヤーモードでもマルチプレイヤーコードを再利用することができる。
Tnetを利用すると
1.そもそもTnetって?
Tasharen Network Framework略してTNet
NGUIの作者がUnity標準のネットワーク機能に不満で開発。NGUI開発のときと同じパターン。
サーバはオープンソース。
2.ネットワーク構成
Photonと同じ
3.チートに弱い
クライアントがホストになる構成のためユーザが手元でチート可能。
対策にはオープンソースで公開されているC#で書かれたTNetServerにゲームロジックを実装する必要がある。
4.RFCがUnity標準から拡張されている
複数のパラメータを送信可能。バイナリや配列も可能。
5.オフラインモード有り
あちこちにifステートメントを入れる必要がない。マルチプレイヤーで使えるコードはそのままシングルプレイヤーでも使用できる。(Same code that works for multi-player will work in single-player. )
まとめ
価格が安いTNet。
Web上に文献が多く、クラウドがあるため気軽に試せるPhotonという印象を受けました。
TNetとPhotonでは同様の機能が実装可能です。ただゲームロジックをサーバで実装する予定がある場合は、サーバフレームワークを持っているPhotonに分があると思います。