クイックスタートガイド
Fusion Unreal SDK 3.0.0は開発版として提供されており、リリース済みで運用中のゲームでの使用は想定していません。プレビュー段階では、重大なバグやAPIに破壊的変更が加わる可能性があります。
はじめに
このドキュメントは、Fusion Unrealを使用して開発を始めるためのクイックリファレンスです。ここでは、三人称視点ゲームの移動をネットワーク化するプロセスを解説し、Photon Fusion for Unrealの主要な機能をいくつか紹介します。
このガイドはUnreal 5.6のテンプレートを元に作成されていますが、使用されているアプローチや手法は、Photon FusionがサポートしているすべてのUnrealバージョンに適用可能です。
新規プロジェクトの作成
Unreal 5.6で新しいUnrealプロジェクトを作成し、Third Personテンプレートを選択します。
Photon Fusionプラグインのセットアップ
新規または既存のプロジェクトにFusion Unrealをセットアップするには、
- (まだ存在しなければ)Unrealプロジェクトフォルダー内に
Pluginsフォルダーを作成します。 - Fusion Unrealプラグインをダウンロードします。
- Fusion Unrealプラグインを解凍し、
PhotonFusionフォルダーをPluginsフォルダーにコピーします。 - プロジェクトを開き、Pluginsウィンドウで
Photon Fusionプラグインが有効になっていることを確認します。 - Project Settingsの
Fusion Settingsを開き、AppIDを設定します。
Photonへの接続とルームへの参加
まず最初に、Photonのルームへ参加する必要があります。Fusion Online Subsystemを使用することで、Photonに接続してルームを作成/参加することが可能です。ルームへ参加すると、クライアント間のステートが複製できるようになります。
アクタのブループリントとしてBP_FusionSetupを作成し、以下のBPロジックをイベントグラフのBeginPlayに追加します。
Room Nameには任意の文字列を使用可能で、Regionには適切な値(現在利用可能:eu,us,asia)を設定します。
最後に、Lvl_ThirdPersonマップの任意の場所にBP_FusionSetupを追加すると、ゲーム開始直後にルーム参加ロジックが実行されるようになります。
アクタの複製
アクタを複製対象にするには、Replicatesを有効にしてFusion Actor Settingsコンポーネントを追加する必要があります。
Fusion Actor Settingsにはゲームに応じて調整可能なプロパティが複数用意されていますが、一般的なシナリオではデフォルト設定で十分良好に動作します。
注意が必要なプロパティの一つがDisable Interpolationです。デフォルトで、Fusionによって複製されるプロパティは「現在のローカル値」と「複製された新しい値」間で補間されます。このデフォルトの挙動によって、所有者によってアクタの位置が直接設定された際の移動のカクつきが軽減されます。ただし、Fusion以外のロジックで既にスムージング処理が行われている場合は、Disable Interpolationにチェックを入れて、デフォルト挙動を無効化するのが最適です。
ここでは、三人称視点キャラクターを複製します。Fusionは、スムージング処理を含むCharacter Movement Componentをサポートしているので、Disable Interpolationにはチェックを入れてください。
BP_ThirdPersonCharacterを開き、Fusion Actor Settingコンポーネントを追加します。Fusion Actor SettingsのDisable Interpolationを有効にします。Class DefaultsのReplicatesが有効になっていることを確認します。
テスト方法
Editor PreferencesのRun Under One Processオプションを無効にして、各PIEウィンドウが独自プロセスで実行されるようにしてください。
基本的なキャラクター移動を複製するための準備は完了しています。ただし、複数のPIEクライアントでテストできるようにするには、いくつかのエディター設定を調整する必要があります。
Run Under One Processオプションを無効にして、各PIEウィンドウが独自プロセスで実行されることを確認してください。- Editor Preferences -> Level Editor -> Play -> Multiplayer Options -> Run Under One Process
必須ではありませんが、
Use Less CPU when in Backgroundオプションを無効にすることを推奨します。- Editor Preferences -> General -> Performance -> Editor Performance -> Use Less CPU when in Background
Lvl_ThirdPersonマップを開き、複数のPIEウィンドウでゲームを起動してください。
プレイボタンを押すと、マップ上にすべてのキャラクターが表示されます。ウィンドウを切り替えながら、各プレイヤーを移動させてみてください。各キャラクターがすべてのクライアント視点で移動する様子が見られるはずです。
おめでとうございます!これでPhoton Fusionを使用した初めてネットワーク体験が作成できました!
プロパティの複製
Photon Fusionが、Unreal標準のレプリケーションをサポートしてる点を活用し、プレイヤーキャラクターの色を変更する機能を追加してみましょう。この変更は、すべてのクライアントに反映されます。
BP_ThirdPersonCharacterに以下のロジックを追加して、Pキーが押された際に新しいキャラクターの色をランダムに生成・保存します。Linear color変数をPaint Tintと命名して、レプリケーション設定をRepNotifyにしてください。
RepNotify関数には以下のロジックを追加します。Paint Tint変数は、マテリアルの対応パラメーターを設定するために使用されます。(ここでは簡単のため、ダイナミックマテリアルを使用していますが、一般的にはキャッシュするのがベストプラクティスです)
これでプレイヤーの色の変更が各プレイヤーに複製されるはずです。
ここでは1つの変数型のみを複製していますが、Photon FusionはRepNotifyの有無にかかわらず、すべての変数型をサポートしています。
ゲーム中にPキーを押すと、ランダムに選択された色がキャラクターに適用されます。この色の変更は、他のクライアントにも複製されます。
物理オブジェクトの追加
Photon Fusionが提供するForecastモードによって、物理オブジェクトのステートがクライアント間で同期できます。補外法(Extrapolation)を用いて、オブジェクトのリモートステートを予測し、それをローカルステートや物理シミュレーションと組み合わせます。
ルートシーンオブジェクトにStaticMeshを持つSimulate Physicsが有効なアクタは、デフォルトでForecastを使用します。必要に応じて、Fusion Actor SettingsコンポーネントからForecastを無効にすることも可能で、その場合は(有効であれば)標準の補間が使用されます。
Bp_Ballという名前で、新しいStaticMesh BP Actorを作成します。- アクタの
Replicatesを設定して、複製が有効になっていることを確認してください。 - メッシュを球状に設定し、
Simuate Physicsオプションが有効になっていることを確認してください。 Fusion Actor Settingsコンポーネントを追加します。Fusion Actor SettingsコンポーネントのAuto Dynamic Ownership Rangeを500に調整します。BP_Ballをマップにドラッグします。
Auto Dynamic Ownership Rangeは、プレイヤーの距離に基づいて、アクタの所有権を自動的に調整するために使用されます。この範囲内のプレイヤーにBP_Ballの所有権が割り当てられ、他のクライアントは補外法に基づくリモートステートになります。
この範囲チェックは、値を0に設定することで無効化できます。その場合は必要に応じて、FusionOnlineSubsystemのSetsWantsOwner()を手動で呼び出すことになります。
RPC
Photon Fusionは、カスタムFusion RPCをサポートしています。以下の手順の例では、Eキーを押すたびにプレイヤーの足元に爆発エフェクトを生成するRPCを作成しています。
- プロジェクトに(まだインポートされていない場合は)
StarterContentパックを追加してください。これによって、爆発エフェクトが使用可能になります。- Content Browserから:Add -> Add Feature or Content Pack -> Content -> Starter Content
BP_ThirdPersonCharacterを開きます。SpawnExplosionRPCという名前で、Vector入力パラメーターを持つ新しいCustom Eventを作成します。そして以下の図のようなロジックを追加します。- イベントグラフを右クリックし、
Custom Fusion RPCを作成します。 Custom Fusion RPCのDetailsパネルで、Reference Event NameドロップダウンからSpawnExplosionRPCイベントを選択します。Custom Fusion RPCノードをEキーボードイベントに接続します。
ゲームを再生すると、Eキーを押すたびに爆発エフェクトが表示されることが確認できます。