Fusion Golf
概要
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
クラスを定義している。onEnter
、onExit
、onUpdate
の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には、それぞれの制作者の好意により提供されたいくつかのアセットが含まれています。これらのアセットは、各サイトから入手できます。
- BOXOPHOBIC による Skybox Extended Shader
- KenneyによるKenney's Minigolf Kit
- Erik Roystan RossによるToon Water Shader s
- Broken VectorによるLow Poly Cliff Pack by Broken Vector
- Broken VectorによるLow Poly Tree Pack
- Milena B DesignによるFredoka One font
重要: 商業プロジェクトで使用するには、それぞれのクリエイターからライセンスを購入する必要があります。
Back to top