サンプルメニューのカスタマイズ
はじめに
サンプルメニューはSDKにバンドルされていて、独自メニューを作成するための出発点として使用できます。ただし、アップグレード毎に置換されてしまうため、修正が上書きされないようにするためにいくつか注意が必要です。
サンプルメニューは、Samplesフォルダーにあるメニュープレハブを含むシーンです。メニュープレハブには、各画面のプレハブがあります。

新しいシーンの追加
シーン選択画面を機能させるには、利用可能なシーンの情報をメニューに伝える必要があります。
QuantumMenuConfig
アセットを作成/選択し、QuantumMenuUIController
スクリプト(サンプルメニューシーンとQuantumMenu
プレハブの一部)に割り当ててください。

メニューで選択できるシーンを追加するための最初のステップは、QuantumGameScene
のようにQuantumマップを持つUnityシーンを用意することです。
そのシーンを使用して、QuantumMenuConfig
アセットのAvailableScenes
リストに新しい要素を設定します。
シーンをUnityのBuildSettings
に追加することも忘れないようにしてください。
名称 | 説明 |
---|---|
Name | 表示されるシーン名です。 |
Preview | シーンのプレビューとして表示されるテクスチャ(例:QuantumMenuSpriteEmpty )をドラッグ&ドロップします。 |
Map | シーンで使用されるQuantumマップアセットをドラッグ&ドロップします。 |
SystemsConfig | ゲーム開始時にRuntimConfig に追加されるSystemsConfig アセットをドラッグ&ドロップします。 |

このプロセスを自動化するボタンが2つあります。
AddCurrentSceneToAvailableScenes
:現在ロードされているシーンを、利用可能なシーンとして追加を試みます。
InitializeAllBuildSettingsScenes
:UnityのBuildSettings
にあるすべてのシーンを、利用可能なシーンとして追加を試みます。
レイアウトの概要
サンプルメニューには、Samplesフォルダーにあるシーンとプレハブが含まれます。このプレハブはすべての画面のプレハブを包含していて、個別画面を参照するメニュー基本クラスで構成されています。各画面はQuantumMenuUIScreen
を継承していて、表示/非表示時にアニメーションを組み込む機能などの様々な機能を提供しています。
メニューのカスタマイズ
このセクションでは、メニューを修正する方法をいくつか提案します。各方法には利点と欠点があります。
プロトタイピング
QuantumMenu
プレハブを直接変更することが、最も簡単な方法です。ただし、すべての変更はQuantum SDKのアップグレードで失われる可能性があります。このオプションは、実験やプロトタイピングにのみ使用することを推奨します。
プレハブバリアント
カスタマイズ性とアップグレード可能性との間の良い着地点として、QuantumMenu
のプレハブバリアントを作成することを推奨します。また、クラスに新しいメンバーを追加する必要がある場合(例:QuantumMenuUIMain
)には、部分クラスを作成するのも実用的な選択です。
プレハブの作成
プレハブバリアントを作成するために、Assets/Photon/Quantum/Samples
フォルダーから対象のプレハブを探します。それを右クリックして、Create > Prefab Variant
を選択します。

プレハブは入れ子になっているため、QuantumMenu Variant
内の各画面のバリアントを作成する必要があります。その後、QuantumMenuUiController
の画面の参照を変更します。

QuantumMenuScene
(またはメニューとして使用される他のシーン)で、元のQuantumMenu
プレハブをバリアントに置き換えます。正しく動作させるためには、Canvas
内に配置することが重要です。

プレハブの複製
Quantumのアップグレードで変更が失われないようにメニューをカスタマイズするには、QuantumMenu
プレハブを複製するのが最も簡単です。ただし、カスタムメニューとサンプル間の繋がりが無くなるため、将来のアップデートは組み込まれなくなります。
画面の構築
QuantumMenuUIScreen
を継承すると、カスタム画面からいくつかの便利な情報にアクセスできるようになります。これにはIQuantumMenuConfig
・IQuantumMenuConnection
・IQuantumMenuConnectArgs
・IQuantumMenuUIController
などが含まれます。さらに、デフォルトのShow
/Hide
メソッドも継承します。サンプルメニューのフレームワークを使用した画面構築に関する情報については、Sample Menu APIドキュメントをご覧ください。
スクリーンプラグイン
プラグインのように画面にウィジェットを追加することが可能で、ベース画面にコードを追加することなく、他の画面で同じウィジェットを使用できます。QuantumMenuScreenPlugin
を継承すると、以下のコードスニペットに示されるように、プラグインがShow()
/Hide()
の呼び出しを受け取るようになります。PhotonMenuViewGameplay
画面で実装されているQuantumMenuScreenPluginPing
が使用例です。
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
ゲームオブジェクトの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
フィールドに、新しく追加されたコンポーネントの参照を設定します。