This document is about: FUSION 1
SWITCH TO

Fusion Golf

Level 4

概要

Fusion Golf サンプルは、物理演算にフォーカスしたアーケードゴルフレーシングゲームを、サーバ主導、クライアント予測型のモデルで作成する方法を紹介します。ルームコードによる直接接続だけでなく、セッションブラウザも備えています。ホストは、1ホールあたりの最大時間、最大ショット数、プレイヤー同士が衝突するかどうか、セッションをセッションブラウザで表示するかどうかなど、さまざまなゲーム設定を変更することができます。サンプルでは、18ホールのコースに、大砲、スピナー、ブーストトンネル、エレベータープラットフォームなど、物理法則に基づいた様々なオブジェクトが用意されています。

はじめる前に

サンプルを実行するには、まず、PhotonEngine Dashboard で Fusion AppId を作成し、リアルタイム設定(Fusion メニューからアクセス可能)の App Id Fusion フィールドにペーストしてください。次に、Scenes フォルダにある Menu シーンをロードして、Play を押してください。

ダウンロード

バージョン リリース日 ダウンロード
1.1.6 Apr 12, 2023 Fusion Golf 1.1.6 Build 164

ハイライト

  • 完全なネットワーク型ゲームステートシステム(プレゲーム、イントロ、プレイ、アウトロ、ポストゲーム)
  • 他のプレイヤーの観戦
  • カスタマイズ可能なゲーム設定(コリジョン、ホール数、最大ショット数、最大時間)
  • ワールド内のオブジェクトの状態の同期
  • ロビーブラウザ(ルームをプライベート化することも可能)
  • 物理演算に特化したオブジェクト(キャノン、スピナー、エレベータープラットフォーム、ブーストトンネル)
  • プレイヤーのビジュアルをカスタマイズ可能(RGBスライダー)
  • リージョン設定、ニックネーム設定、グラフィックオプション

プロジェクト

フォルダ構成

メインのScriptsフォルダ /Scripts には、サブフォルダ Networking があり、Fusionとのインタフェースを主機能とするスクリプトが格納されています。
主なスクリプトは以下の通りです。

PlayerRegistry

PlayerRegistryは、ルーム内の各プレーヤーへの参照を保存し、1人または多数のプレイヤーに対してカウント、選択、アクションを実行するためのユーティリティ・メソッドを提供します。ユーティリティ関数のデフォルトの動作は、観戦中のプレイヤーを無視しますが、 includeSpectators パラメーターが true の場合は、プレイヤーの完全なコレクションに対して操作されます。

Spectators

Spectatorsはゲームに参加するのではなく、観戦することを明示的に選択したプレイヤーです。観戦者の PlayerObject には Controller がアサインされることはありません。

GameState

ゲームロジックのフローと動作は GameState NetworkBehaviour によって制御されます。GameState はゲームのフェーズを表す列挙型を定義しており、ネットワークに接続された StateMachine プロパティがそのステートとして使用する。
StateMachine<T> では、3つのフィールドを持つ StateHooks クラスを定義している。onEnteronExitonUpdate の3つのフィールドを持つ StateHooks クラスを定義しています。StateMachine クラスを使用する場合、各 enum state は StateHooks を持ち、入力時、終了時、およびアクティブにステートに滞在している間に何が起こるかを定義することができる。

ゲームに参加する

ユーザーはセッションブラウザを使うか、セッションコードを使って直接セッションを主催したり参加したりすることができます。セッションコードは、空白のままだと自動的に生成されるので、ユーザーがホストすることを選択した場合、入力は任意です。セッションに参加すると、セッションコードが画面上部に表示されます。

セッションコードは、 runner.SessionInfo.Nameでアクセスできます。

リージョン選択

ホストまたは参加を選択する前に、ユーザーはどのPhoton Cloudリージョンを使用するかを選択するためのドロップダウンが表示されます。ドロップダウンのオプションは、Regions Documentationに従って選択されています。

マッチメーカー

ホスト、参加、セッションブラウザはすべて Matchmaker クラスによって処理されます。NetworkRunner.StartGame メソッドのラッパーとして機能し、接続エラーが発生した場合は DisconnectUI にエラーを転送し、ユーザーに表示します。

入力の処理

入力は PlayerInputBehaviour.cs によって、カスタム INetworkInput 構造体 PlayerInput にポーリングされます。このサンプルでは、入力はマウスのクリックと移動だけで構成されています。
PlayerInput は比較的シンプルで、3つのフィールドだけです。

  • isDragging - プレイヤーがマウスボタンを押したままかどうか。
  • dragDelta - プレイヤーのマウスが下にドラッグされた量
  • yaw - プレーヤーが向いている 角度
    このデータは Putter プレイヤースクリプトによって処理され、ボールを置くだけでなく、ローカルプレイヤーや観客が適切な UI を見ることができるようにします。

プレイヤー

プレイヤーは2つのパーツで構成されています。

  • PlayerObject - このオブジェクトに関連付けられた PlayerRef 値、プレイヤーのコントローラ (Putter) への参照、ルーム内のインデックス、ニックネーム、選択した色、スコアに関するゲームプレイデータが含まれます。
  • Putter - 物理演算と UI の入力に応答する役割を担います。

サードパーティーアセット

Golf Sampleには、それぞれの制作者の好意により提供されたいくつかのアセットが含まれています。これらのアセットは、各サイトから入手できます。

重要: 商業プロジェクトで使用するには、それぞれのクリエイターからライセンスを購入する必要があります。

Back to top