サンプルメニューのカスタマイゼーション
はじめに
サンプルメニューは SDK と共にバンドルされており、カスタマイズされたメニューを作成するための出発点として使用できます。アップグレードが行われるたびに置き換えられるため、修正が上書きされないようにいくつかの注意が必要です。
サンプルメニューは、サンプルフォルダー内に配置されたメニュープリファブを含むシーンです。メニュープリファブの中には各画面のプリファブがあります。

新しいシーンの追加
シーン選択画面が機能するためには、メニューが利用可能なシーンに関する情報を知る必要があります。QuantumMenuConfig
アセットを作成または選択し、QuantumMenuUIController スクリプトに割り当てます(これはサンプルメニューシーンと QuantumMenu プリファブの一部です)。

メニューで選択できるシーンを追加するための最初のステップは、初期の QuantumGameScene
のように Quantum マップを含む Unity シーンを持つことです。
そのシーンを使用して、QuantumMenuConfig アセットの AvailableScenes リストに新しいエントリを設定します。
シーンを Unity BuildSettings にも配置してください。
| 名称 | 説明 |
| ----------- | ----------- |
| 名前 | 表示されるシーンの名前。 |
| ScenePath | ここにシーンファイルをドラッグアンドドロップします。 |
| プレビュー | シーンのプレビューとして表示するためのテクスチャをドラッグアンドドロップします。たとえば、QuantumMenuSpriteEmpty を使用します。 |
| マップ | シーンで使用される Quantum マップアセットをドラッグアンドドロップします。 |
| SystemsConfig | ゲームを開始するときに RuntimeConfig に追加される Quantum SystemsConfig アセットをドラッグアンドドロップします。 |

プロセスの一部を自動化するための 2 つのボタンがあります:
AddCurrentSceneToAvailableScenes
: 現在ロードされているシーンを利用可能なシーンとして追加しようとします。
InitializeAllBuildSettingsScenes
: Unity BuildSettings にあるすべてのシーンを利用可能なシーンとして追加しようとします。
レイアウトの概要
サンプルメニューには、シーンとサンプルフォルダー内に配置されたプリファブが含まれています。このプリファブは、すべての画面プリファブを包含しており、各個別の画面を参照するメニューベースクラスで構成されています。これらの画面は QuantumMenuUIScreen
から継承され、アニメーションを統合する機能を提供するなど、様々な機能を持っています。
メニューのカスタマイズ
このセクションでは、メニューを修正する方法についてのいくつかの提案を提供します。それぞれの方法には自身の利点と欠点があります。
プロトタイピング
最も簡単な方法は、QuantumMenu プリファブに直接変更を加えることです。ただし、すべての変更は Quantum SDK のアップグレード中に失われる可能性があります。このオプションは実験やプロトタイピングにのみ使用することを推奨します。
プリファブバリアント
カスタマイズとアップグレードの可能性との間で良好なバランスを達成するには、QuantumMenu からプリファブバリアントを作成することを推奨します。また、クラスに新しいメンバーを追加する必要がある場合には部分クラスを作成するのも実用的な選択です(例:QuantumMenuUIMain
)。
プリファブの作成
プリファブバリアントを作成するには、Assets/Photon/Quantum/Samples
ディレクトリ内のターゲットプリファブを見つけます。その後、右クリックして Create > Prefab Variant
を選択します。

これはネストされたプリファブであるため、QuantumMenu Variant
内の各画面にもバリアントを作成する必要があります。その後、QuantumMenuUiController
の画面リファレンスを変更します。

現在、QuantumMenuScene またはメニューとして使用される他のシーン内で、元の QuantumMenu プリファブをそのバリアントと置き換えます。正しく機能させるためにキャンバスの内側に配置することが重要です。

プリファブの複製
Quantum のアップグレード中に変更が失われないようにメニューをカスタマイズする最も簡単な方法は、QuantumMenu プリファブを複製することです。ただし、この場合、カスタムメニューとサンプル間に接続がなくなるため、将来のアップデートは組み込まれません。
スクリーンの構築
QuantumMenuUIScreen
から継承すると、カスタムスクリーンは複数の貴重なアクセサにアクセスできます。これには IQuantumMenuConfig
、IQuantumMenuConnection
、IQuantumMenuConnectArgs
、IQuantumMenuUIController
などが含まれ、カスタマイズニーズに役立つ情報が得られます。さらに、デフォルトの Show
と Hide
メソッドも継承します。サンプルメニューフレームワークを使用したスクリーン構築に関する詳細は、サンプルメニュー API ドキュメントを参照してください。
スクリーンプラグイン
これは、プラグインのようにスクリーンにウィジェットを追加する方法で、同じウィジェットを他のスクリーンで使用することができます。QuantumMenuScreenPlugin
から継承することにより、プラグインは次のコードスニペットに示される Show()
および Hide()
の呼び出しを受け取ります。QuantumMenuScreenPluginPing
は PhotonMenuViewGameplay
スクリーンで実装されており、例として使用できます。
C#
public class QuantumMenuScreenPluginFoo : QuantumMenuScreenPlugin {
public override void Show(QuantumMenuUIScreen screen) {
base.Show(screen);
}
public override void Hide(QuantumMenuUIScreen screen) {
base.Hide(screen);
}
}
シンプルな接続
完全にカスタムメニューを構築したい場合は、QuantumSampleConnection
はセッションを開始するために必要な手順を理解するための参照として使用できる簡略化されたシーンです。QuantumSimpleConnectionGUI
では、接続を確立し、マップを選択し、セッションを開始するために必要な基本を確認できます。

RuntimePlayer データの拡張
デフォルトでは、RuntimePlayer
クラスには、プロトタイピングプロセスをスピードアップするためのいくつかの便利な共通フィールドが含まれています:PlayerNickname
(メニューでプレイヤーが設定した名前を保存)と PlayerAvatar
(特定のプレイヤーを表すエンティティプロトタイプへの参照)が含まれます。シミュレーションが開始されるときにエンティティを作成するために使用できます。
名前のニックネームはランタイム時にメニュー UI を介して設定されますが、プレイヤーアバターは設定されず、コードを介して設定するか、QuantumMenu
GameObject で直接 QuantumMenuUIController
コンポーネントの ConnectArgs/RuntimePlayers
配列に設定できます。
より多くのプレイヤー固有データを追加し、そのデータを適切に埋めるカスタムメニューロジックを持つためには、以下の手順に従ってください:
- ファイル
RuntimePlayer.User.cs
を見つけ、関連するデータを追加し、次のようにシリアル化します:
C#
namespace Quantum
{
using Photon.Deterministic;
public partial class RuntimePlayer
{
public int TeamId;
partial void SerializeUserData(BitStream stream)
{
stream.Serialize(ref TeamId);
}
}
}
QuantumMenuConnectionBehaviourSDK
から継承し、ConnectAsyncInternal()
メソッドをオーバーライドし、次のように関連データを追加する新しいクラスを作成します:
C#
namespace Quantum
{
using Quantum.Menu;
using System.Threading.Tasks;
public class CustomQuantumConnectionBehaviour : QuantumMenuConnectionBehaviourSDK
{
protected override Task<ConnectResult> ConnectAsyncInternal(QuantumMenuConnectArgs connectArgs)
{
connectArgs.RuntimePlayers[0].TeamId = 1; // ここで希望のチーム ID を取得するためのゲーム固有のロジックを追加します
return base.ConnectAsyncInternal(connectArgs);
}
}
}
- メニューシーンで、
QuantumMenu
オブジェクトを見つけ、QuantumMenuConnectionBehaviourSDK
をCustomQuantumConnectionBehaviour
に置き換えます。前のスクリプトが持っていた同じOnProgress
コールバックを忘れずに再度追加してください。 - 同じオブジェクト内の
QuantumMenuUIController
で、フィールドConnection
に新たに追加されたコンポーネントへの参照を設定します。