ご留意ください:Photon TrueSyncとThunderの開発は停止されており、今後はアップデートもパリリースされません。既存のアプリケーションへの影響はありませんが、現在開発中のアプリケーションについてはマイグレーションを推奨しています。

Photon TrueSync イントロ

TrueSync APIリファレンスはこのリンクから入手できます。 link.

はじめに

Photon TrueSyncは、Photon Unity Networking上に構築されたUnityのマルチプレイヤーロックステップシステムです。

TrueSyncでは、クライアントマシンはそれぞれのプレイヤーによって生成された入力のみを交換し、シミュレーションはゲームクライアント間でロックステップし、帯域幅要件を大幅に削減し、完璧な同期を可能にします。

開発者がマシン間でシミュレーションを確定的に保てるよう、カスタム物理エンジンと、その他のクラスが含まれています。

TrueSyncは、Unityが対応しているほぼすべてのプラットフォームにエクスポートできます。

必要なコード

TrueSyncを最大限に活用するには、いくつかのスクリプトを書く必要があります。
このページでは、始めるための最も重要なスクリプトを紹介します。

TrueSyncの確定的セクションの開始

TrueSyncのセクションは、PUN(Photon Unity Network)ルームに接続されたゲームクライアント間で行われるため、ルームの設定と作成/参加方法のドキュメントを参照してください。

実際のTrueSync管理されたゲームプレイセクションは、ゲームオブジェクトに添付されたTrueSyncManagerコンポーネントを含むシーンがPUNを介して同期ロードされると、マスタークライアントによって開始されます。

TrueSyncManagerは、ゲームクライアントがルームに接続されているかどうかを確認します。これは、マルチプレイヤーのロックステップセクションを開始することを意味します。
PUNルームに接続せずに使用することもできます。この場合、システムはオフラインモードで動作します。これは、ゲームのシングルプレイヤー部分に同じコードとコンポーネントを使用するのに最適です。

入力のキューイング

ロックステップシステムでは、ローカルプレイヤーからの入力をゲームプレイコードで使用する前にキューに入れなければなりません。
そうすることにより、システムは、リモートプレイヤーからの入力を待ち、キューに入れられたローカルの入力と同期させることができます。

C#

    public override void OnSyncedInput () {
        FP x = Input.GetAxis("Horizontal");
        TrueSyncInput.SetFP(0, x);
    }

ローカルクライアントとリモートクライアントの両方で使用するTrueSyncの入力キューにプレイヤーの入力を登録するために必要なのは上記のコードのみです。

最初のパラメータはキーなので、必要に応じて複数の入力値を登録できます。

floatからFixedPoint(FP)に変換する必要があります。
float(浮動)小数点数は、異なるアーキテクチャーでまったく同じように計算されるわけではありません。したがって、すべてのクライアントでシミュレーションを同期させる必要があります。

入力を使用してgamestateを更新

次に、Unity上の他のゲームと同じように、入力値を使用してゲームオブジェクトを更新します。
違いは、Unityから直接ではなく、TrueSyncのキューシステムから入力値を取得することです。

C#

    public override void OnSyncedUpdate () {
        TSVector move = new TSVector(TrueSyncInput.GetInt(0), 0, 0);
        tsTransform.Translate(move * TrueSyncManager.DeltaTime);
    }

上記のコードは、TSVectorクラスも示しています。これは、Unity Vector3とまったく同じ方法で動作しますが、x、y、zのfloatではなくFPを使用します。
Unityの代わりにTrueSyncのデルタタイムを使用していることにもご注目ください。

物理

TrueSyncには、2Dゲーム用と3D用の2つのカスタム物理エンジンが搭載されています。
どちらも、Unityの元の物理エンジンのものと非常によく似たコンポーネントアーキテクチャとAPIを使用しています。

TrueSync physics
TrueSyncのカスタム3D物理エンジン。Sphere Collider, Rigidbody, Transformコンポーネント及び、プロパティードロワーとギズモが表示されています。

TrueSyncには、組み込まれた物理エンジンの使い方を説明するいくつかのゲームサンプルが含まれています。
下のコードは、物理剛体のTrueSyncの決定論的なバージョンであるTSRigidbodyに力を加える方法を示しています。

C#

    public override void OnSyncedUpdate () {
        TSRigidBody rb = GetComponent<TSRigidBody>();
        rb.AddForce(TSVector.forward * TrueSyncManager.DeltaTime);
    }

コリジョンとトリガはUnityの物理的な対応と同じように機能しますが、すべてのコールバックメソッドは "OnSynced"で始まります。つまり、TrueSyncの確定的物理エンジンから呼び出されます。

C#

    public void OnSyncedCollisionEnter(GameObject other) {
        Destroy(other);
    }
Back to top