This document is about: QUANTUM 3
SWITCH TO

サンプルメニューのカスタマイゼーション

はじめに

サンプルメニューは SDK と共にバンドルされており、カスタマイズされたメニューを作成するための出発点として使用できます。アップグレードが行われるたびに置き換えられるため、修正が上書きされないようにいくつかの注意が必要です。

サンプルメニューは、サンプルフォルダー内に配置されたメニュープリファブを含むシーンです。メニュープリファブの中には各画面のプリファブがあります。

Simple Connection
Quantum サンプルメニュー

新しいシーンの追加

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

QuantumMenuConfig - Controller
QuantumMenuConfig - コントローラー

メニューで選択できるシーンを追加するための最初のステップは、初期の QuantumGameScene のように Quantum マップを含む Unity シーンを持つことです。

そのシーンを使用して、QuantumMenuConfig アセットの AvailableScenes リストに新しいエントリを設定します。

シーンを Unity BuildSettings にも配置してください。

| 名称 | 説明 |
| ----------- | ----------- |
| 名前 | 表示されるシーンの名前。 |
| ScenePath | ここにシーンファイルをドラッグアンドドロップします。 |
| プレビュー | シーンのプレビューとして表示するためのテクスチャをドラッグアンドドロップします。たとえば、QuantumMenuSpriteEmpty を使用します。 |
| マップ | シーンで使用される Quantum マップアセットをドラッグアンドドロップします。 |
| SystemsConfig | ゲームを開始するときに RuntimeConfig に追加される Quantum SystemsConfig アセットをドラッグアンドドロップします。 |

QuantumMenuConfig - Available Scenes
QuantumMenuConfig - 利用可能なシーン

プロセスの一部を自動化するための 2 つのボタンがあります:

AddCurrentSceneToAvailableScenes: 現在ロードされているシーンを利用可能なシーンとして追加しようとします。
InitializeAllBuildSettingsScenes: Unity BuildSettings にあるすべてのシーンを利用可能なシーンとして追加しようとします。

レイアウトの概要

サンプルメニューには、シーンとサンプルフォルダー内に配置されたプリファブが含まれています。このプリファブは、すべての画面プリファブを包含しており、各個別の画面を参照するメニューベースクラスで構成されています。これらの画面は QuantumMenuUIScreen から継承され、アニメーションを統合する機能を提供するなど、様々な機能を持っています。

メニューのカスタマイズ

このセクションでは、メニューを修正する方法についてのいくつかの提案を提供します。それぞれの方法には自身の利点と欠点があります。

プロトタイピング

最も簡単な方法は、QuantumMenu プリファブに直接変更を加えることです。ただし、すべての変更は Quantum SDK のアップグレード中に失われる可能性があります。このオプションは実験やプロトタイピングにのみ使用することを推奨します。

プリファブバリアント

カスタマイズとアップグレードの可能性との間で良好なバランスを達成するには、QuantumMenu からプリファブバリアントを作成することを推奨します。また、クラスに新しいメンバーを追加する必要がある場合には部分クラスを作成するのも実用的な選択です(例:QuantumMenuUIMain)。

プリファブの作成

プリファブバリアントを作成するには、Assets/Photon/Quantum/Samples ディレクトリ内のターゲットプリファブを見つけます。その後、右クリックして Create > Prefab Variant を選択します。

Prefab Creation
プリファブの作成

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

Prefab Fix
プリファブ修正

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

Prefab Replacement
プリファブの置き換え

プリファブの複製

Quantum のアップグレード中に変更が失われないようにメニューをカスタマイズする最も簡単な方法は、QuantumMenu プリファブを複製することです。ただし、この場合、カスタムメニューとサンプル間に接続がなくなるため、将来のアップデートは組み込まれません。

スクリーンの構築

QuantumMenuUIScreen から継承すると、カスタムスクリーンは複数の貴重なアクセサにアクセスできます。これには IQuantumMenuConfigIQuantumMenuConnectionIQuantumMenuConnectArgsIQuantumMenuUIController などが含まれ、カスタマイズニーズに役立つ情報が得られます。さらに、デフォルトの ShowHide メソッドも継承します。サンプルメニューフレームワークを使用したスクリーン構築に関する詳細は、サンプルメニュー API ドキュメントを参照してください。

スクリーンプラグイン

これは、プラグインのようにスクリーンにウィジェットを追加する方法で、同じウィジェットを他のスクリーンで使用することができます。QuantumMenuScreenPlugin から継承することにより、プラグインは次のコードスニペットに示される Show() および Hide() の呼び出しを受け取ります。QuantumMenuScreenPluginPingPhotonMenuViewGameplay スクリーンで実装されており、例として使用できます。

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 では、接続を確立し、マップを選択し、セッションを開始するために必要な基本を確認できます。

Simple Connection
Quantum シンプル接続

RuntimePlayer データの拡張

デフォルトでは、RuntimePlayer クラスには、プロトタイピングプロセスをスピードアップするためのいくつかの便利な共通フィールドが含まれています:PlayerNickname(メニューでプレイヤーが設定した名前を保存)と PlayerAvatar(特定のプレイヤーを表すエンティティプロトタイプへの参照)が含まれます。シミュレーションが開始されるときにエンティティを作成するために使用できます。

名前のニックネームはランタイム時にメニュー UI を介して設定されますが、プレイヤーアバターは設定されず、コードを介して設定するか、QuantumMenu GameObject で直接 QuantumMenuUIController コンポーネントの ConnectArgs/RuntimePlayers 配列に設定できます。

より多くのプレイヤー固有データを追加し、そのデータを適切に埋めるカスタムメニューロジックを持つためには、以下の手順に従ってください:

  1. ファイル 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);
    }
  }
}
  1. 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);
    }
  }
}
  1. メニューシーンで、QuantumMenu オブジェクトを見つけ、QuantumMenuConnectionBehaviourSDKCustomQuantumConnectionBehaviour に置き換えます。前のスクリプトが持っていた同じ OnProgress コールバックを忘れずに再度追加してください。
  2. 同じオブジェクト内の QuantumMenuUIController で、フィールド Connection に新たに追加されたコンポーネントへの参照を設定します。
Back to top