このページは編集中です。更新が保留になっている可能性があります。
Boltからの移行
はじめに
このドキュメントでは、Photon Bolt
とPhoton Fusion
のAPIの主要な相違点と、Boltで書いたゲームの一部をFusionプロジェクトに移植する方法について説明します。
Bolt と Fusion は多くのコンセプトを共有していますが、使い方、API、そして主に一般的な動作は異なります。
相違点
ここでは、Photon Bolt
とPhoton Fusion
の主な相違点を列挙しています。
- Bolt では、一般的な API は静的なクラスである
BoltNetwork
とBoltMatchmaking
からアクセスできますが、Fusion ではNetworkRunner
のインスタンスを使用してアクセスします。 - Fusionは同じ実行ファイルから複数のピアを実行することができますが、Boltは1つしか実行できません。つまり、同じインスタンスから複数のクライアントを実行することが可能です。これはテストやデバッグに便利です。
- どちらのソリューションも
Client-Server
アーキテクチャをサポートしていますが、Fusion はShared Mode
もサポートしており、これはよりPUN
の仕組みに似ています。また、Boltが後者のみをサポートしているのに対し、Fusionはデルタ・スナップショット
と継続的整合性
の両方をサポートしています。 - Fusionはビルトインの
NetworkRigidbody
とNetworkRigidbody2D
コンポーネントを使用して物理予測とロールバックを完全にサポートしていますが、Boltではこれは開発者が処理/実装する必要があります。Fusionには、プレイヤーのキャラクターを動かすための基本的な実装としてNetworkCharacterController
がありますが、Boltでは、これもカスタム実装が必要です。
類似点
ここでは、Photon Bolt
とPhoton Fusion
の主な類似点を列挙しています。
- Fusion には
NetworkObject
という概念があります。これは Unity のGame Object
を表し、ピア間でデータを同期するために使われるネットワークプロパティを持ちます。Bolt にもBoltEntity
という名前で同じ概念があります。NetworkObject
の状態はNetworked
属性を使って任意のNetworkBehaviour
に記述することができます。Bolt でこれを行うには、Bolt Assets
ウィンドウでState
アセットを作成/編集して、プロパティを作成し設定する必要があります。詳細. - 主なSDKのイベント(start, shutdown, disconnectなど)は、Boltでは
GlobalEventListener
のインスタンスを使用して処理され、FusionではNetworkRunner
に関連付けられたINetworkRunnerCallbacks
の実装を介してこの種のイベントを公開します。 - どちらのSDKにも
State Authority
とInput Authority
という概念がありますが、BoltではOwnership
とControl
と呼ばれています。これらは全く同じ意味です。詳細。 - FusionもBoltと同様に予測ロールバックシステムです。Bolt では
BoltEntity
のController
が送るCommand
がありますが、Fusion ではNetworkObject
に対してInput Authority
を持つピアからNetworkInput
を送ります。しかし、ロールバック (State reset) は Bolt とは異なり、手動(ExecuteCommand
内でresetState = true
とする)で行われ、Fusion では自動的に新しい Frame で、FixedUpdateNetwork
メソッドの呼び出し前に実行されます。 - コントロールされている
BoltEntity
に対して、BoltはEntity
に関連するEntityEventListener
でSimulateController
メソッドを呼び出します。Fusion では、複数のNetworkInput
(Bolt
ではCommand
) のソースがなく、全てのNetworkObjects
に対して特定のFrame
に関連付けられるのは一つのNetworkInput
だけなので、これは異なる方法で行われます。これはINetworkRunnerCallbacks.OnInput
コールバックの実装によって実現されています。詳細はこちら. - Fusionでよく知られているリモートプロシージャコール(
RPC
)は、Boltではイベント
と呼ばれています。これらは非常によく似たコントロール(誰が送信できるか、誰が受信できるか、信頼性)を持っていますが、Fusionではコードで直接定義できますが、BoltではBolt Assets
ウィンドウを使ってセットアップする必要があります。詳細はこちらを参照してください。 - Fusionには、一般的なデータの同期を助けるビルトインコンポーネントがたくさんあります。その一例が、
NetworkTransform
で、BoltのTransform Property
にマッピングすることができます。この2つはゲームオブジェクトの位置と回転を同期させるために使われ、スナップショット間のスムーズな移行を提供し、データポイント間を補間することができます。詳細はこちらをご覧ください。)] - Fusionは、
Area of Interest
APIを使用して、希望するNetworkObject
のセットだけを同期させることもできます。詳細はこちら。 - どちらのSDKでも、シーンオブジェクトという概念があり、これはシーンに関連づけられたネットワークオブジェクトです。特定のシーンがロードされると、これらのオブジェクトは自動的にシミュレーションにアタッチされます。
- 両SDKに実装されているもう一つのソリューションは、主にシューターとターゲットの間のラグを考慮したレイキャストによる衝突を検出するために使用される
Lag Compensated Physics Checks
(ラグ補償物理チェック)です。詳細はこちら。
参照テーブル
Bolt | Fusion | Description |
---|---|---|
BoltNetwork, BoltMatchmaking | NetworkRunner | Main API entrypoint |
BoltEntity | NetworkObject | Represents a Networked Game Object |
BoltEntity State Properties | Networked Properties | Set of synchronized properties |
GlobalEventListener | INetworkRunnerCallbacks | General Event handling |
EntityEventListener | NetworkBehaviour, SimulationBehaviour | Networked Game Object Event handling |
BoltNetwork.Instantiate() | NetworkRunner.Spawn() | Creates a new Networked Game Object |
BoltNetwork.Destroy() | NetworkRunner.Despawn() | Removes a Networked Game Object from the simulation |
BoltEntity.IsOwner | NetworkObject.HasStateAuthority | Signal if the peer can modify the State of a Networked Game Object |
BoltEntity.HasControl | NetworkObject.HasInputAuthority | Signal if the peer that can push inputs to a Networked Game Object |
Commands | NetworkInput | Control Structure used to predict on Client and alter the State on the Server |
Objects | NetworkStructs | Reusable data structures that contain Networked Properties and can be used in more than one State |
Events | RPC | Communication method used to transfer pieces of information that does not need to be part of the simulation |
Transform Property | NetworkTransform | Built-in support to synchronize the Transform (position and rotation) of a Networked Game Object |
BoltNetwork.LoadScene | NetworkSceneManager | API for switching/loading scenes in a synchronized manner |