LoginSignup
33

More than 5 years have passed since last update.

Unityでスマホのマルチプレイ PhotonとTNet比較

Last updated at Posted at 2015-01-07

概要

スマホゲームでUnityマルチプレイを実現するためには、どうすればよいか。
PhotonSDKとTNetをざっくり斜め読みしたまとめ。

UnityのNetworkViewでそのまま実装した場合の問題点

1.そもそもスマホ同士だと繋がらない場合がある

Unity Network Reference Guideに記載されている通り、中央サーバを持たずスマホ端末の1台をホストとする。ホストの通信環境によっては繋がらない状態になる。具体的にはスマホだと同じLAN上じゃないと安定して繋がらない。

g.png

2.ホストが落ちると全員落ちる
通信が不安定なスマホだと結構致命的。

3.権威サーバが存在しないためチートに弱い
ホストがスマホ端末になるためどうしてもチートに弱い構成になります。

4.Remote Function Callの使い勝手が悪い
RFCとはネットワーク越しに相手objectのmethodを実行する機能です。
Unity標準のRFCは1度に同時に1つのパラメータしか送れず、同期できるパラメータが限られています。
大変使い勝手が悪いです。

5.同期したオブジェクトが動くとカクカクする

そのまま実装すると通信相手がワープ移動して見えます。
移動先を予測する移動補完の処理を書く必要があります。

6.オフラインモードなし
オフラインに移行できる設計になっていない。シングルプレイヤーのコードとマルチプレイヤーのコードを別々に実装する必要がある。

Photon Unity Networkingを利用すると

1.ネットワーク構成
Photonクラウドがroomを提供する。ホストが落ちても委譲が可能。繋がらない問題はそもそも発生しない。
pppg.png

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に分があると思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33