This document is about: FUSION 1
SWITCH TO

このページは編集中です。更新が保留になっている可能性があります。

Boltからの移行

はじめに

このドキュメントでは、Photon BoltPhoton FusionのAPIの主要な相違点と、Boltで書いたゲームの一部をFusionプロジェクトに移植する方法について説明します。
Bolt と Fusion は多くのコンセプトを共有していますが、使い方、API、そして主に一般的な動作は異なります。

相違点

ここでは、Photon BoltPhoton Fusionの主な相違点を列挙しています。

  • Bolt では、一般的な API は静的なクラスである BoltNetworkBoltMatchmaking からアクセスできますが、Fusion では NetworkRunner のインスタンスを使用してアクセスします。
  • Fusionは同じ実行ファイルから複数のピアを実行することができますが、Boltは1つしか実行できません。つまり、同じインスタンスから複数のクライアントを実行することが可能です。これはテストやデバッグに便利です。
  • どちらのソリューションも Client-Server アーキテクチャをサポートしていますが、Fusion は Shared Mode もサポートしており、これはより PUN の仕組みに似ています。また、Boltが後者のみをサポートしているのに対し、Fusionはデルタ・スナップショット継続的整合性の両方をサポートしています。
  • FusionはビルトインのNetworkRigidbodyNetworkRigidbody2Dコンポーネントを使用して物理予測とロールバックを完全にサポートしていますが、Boltではこれは開発者が処理/実装する必要があります。Fusionには、プレイヤーのキャラクターを動かすための基本的な実装としてNetworkCharacterControllerがありますが、Boltでは、これもカスタム実装が必要です。

類似点

ここでは、Photon BoltPhoton 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 AuthorityInput Authorityという概念がありますが、BoltではOwnershipControlと呼ばれています。これらは全く同じ意味です。詳細
  • FusionもBoltと同様に予測ロールバックシステムです。Bolt では BoltEntityController が送る Command がありますが、Fusion では NetworkObject に対して Input Authority を持つピアから NetworkInput を送ります。しかし、ロールバック (State reset) は Bolt とは異なり、手動(ExecuteCommand内で resetState = true とする)で行われ、Fusion では自動的に新しい Frame で、 FixedUpdateNetwork メソッドの呼び出し前に実行されます。
  • コントロールされている BoltEntity に対して、Boltは Entity に関連する EntityEventListenerSimulateController メソッドを呼び出します。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
Back to top