インゲームでスレートを使用する

インゲーム ユーザー インターフェースにスレート UI ウィジェットを使用する

スレート ウィジェット を使用して、ヘッドアップ ディスプレイ (HUD) やメニューなどのその他のユーザー インターフェース (UI) を作成することができます。これらの UI は 1 つ以上のコンテナ ウィジェットで構成されており、各コンテナ ウィジェットは、UI の特定の側面を担ういくつかのタイプのウィジェットを保持する場合があります。

たとえば、ゲームの HUD 用に 1 つ総合的なウィジェットだけでなく、メインメニュー、オプション メニュー、ポーズ メニュー、スコアボードなどのウィジェットもある場合があります。これらのウィジェットはそれぞれ他のカスタム ウィジェット、ラベル、テキスト ボックス、画像、その他の種類の要素で構成されています。

これらのコンテナ ウィジェットはそれぞれ、ゲーム内の状況に応じてユーザーの ビューポート に追加したり削除したりすることができます。

  • ゲームが開始すると、ビューポートにメインメニュー ウィジェットが追加されます。

  • メニューからオプションを 1 つ選択すると、メインメニュー ウィジェットがビューポートから削除されます。

    • オプションが別のメニューを開くと、新しいメニューがビューポートに追加されます。

  • どこかでプレイヤーがゲームを一時停止した場合、ポーズメニュー ウィジェットがビューポートに追加されます。

  • ゲームが再開されると、ポーズメニュー ウィジェットがビューポートから削除されます。

  • プレイヤーの HUD が初期化されると、HUD ウィジェットがビューポートに追加されます。

プロジェクトの設定

スレート ユーザーインターフェース (UI) フレームワークを使用するためには、 フレームワークが認識されるようにプロジェクトを適切に設定する必要があります。これにより、Slate.h ヘッダーをインクルードしたり、スレートで UI をビルドするために必要な フレームワークの各種エレメントを参照できるよになります。

モジュールの依存関係

スレート フレームワークは、いくつかのモジュールに格納されています。プロジェクトがこれらのフレームワークを認識するためには、 プロジェクトに対して何らかの依存関係を *.build.cs ファイルで設定しなければなりません。

プロジェクトは、以下のモジュールにアクセスする必要があります。

モジュール

依存関係の種類

InputCore

Public

Slate

Private

SlateCore

Private

スレート モジュールの依存関係の設定方法

  1. プロジェクトの [ProjectName].build.cs ファイルを開きます。格納場所は、[ProjectDir]/[ProjectName]/Source/[ProjectName] ディレクトリです。

  2. "InputCore"PublicDependencyModuleNames に追加して、 InputCore public dependency を追加します。

        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

    コード プロジェクトが作成されると、InputCore モジュールがデフォルトで依存関係が public として設定されます。

  3. すべてのスレートと SlateCore の依存関係は private です。*.build.cs ファイルには、 private の依存関係を追加するための行があります。

        PrivateDependencyModuleNames.AddRange(new string[] {  });

    その行に、 SlalteCore と Slate モジュールを追加します。

        PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

    プロジェクトの作成時期とエンジンのバージョンによって、 *.build.cs ファイルに既にスレートの依存関係が設定されていても、コメントアウトされている場合があります。該当する行のコメントを解除すれば 依存関係を設定することができます。

        // Uncomment if you are using Slate UI (スレート UI を使用している場合はコメント行を外します)
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

ウィジェットの表示

ゲーム内にスレッド ウィジェットを表示するために、ゲームのビューポートに追加しなければなりません。オーバーレイされたウィジェットは、追加時に指定された Z オーダーに従って、Z オーダーの値が大きいものが Z オーダーの小さい値の上に表示されます。

ゲーム ビューポートへアクセスする

ゲームのビューポートは、GameViewportClient のインスタンスです。UEngineGameViewport メンバーを使用して、現在のゲーム ビューポートへの参照にアクセスできます。これには、ゲームの現在の UEngine インスタンスへの GEngine グローバル ポインタを使用してアクセスできます。

例:

    GEngine->GameViewport

GEngineGameViewportNULL にできるため、メンバーを含め、これらにアクセスする前に 必ず値を確認してください。

ウィジェットをビューポートに追加する

スレート ウィジェットは、参照 (TSharedref<SWidget>) を GameViewportClient::AddViewportWidgetContent() ウィジェットに渡すと、ビューポートへ追加されます。この関数はウィジェットと Z 順序の両方を受け取ると、 前述したとおり、新規ウィジェットのソート順序を決定します。Z 順序は任意ですが、 デフォルトの値は 0 です。

ビューポートに追加するウィジェットへの参照は、HUD などのクラスのメンバーとして格納するか、作成して関数の呼び出し時に渡すことができます。

メンバー変数に格納されているウィジェットへ参照を渡す (TSharedPtr として):

    GEngine->GameViewport->AddViewportWidgetContent(
        SNew(MyWidgetPtr.ToSharedRef())
    );

GameViewportClient::AddViewportWidgetContent() を渡すときに、SNew() を使ってウィジェットを作成:

    GEngine->GameViewport->AddViewportWidgetContent(
        SNew(SWeakWidget)
        .PossiblyNullContent(MyWidgetClass)
    );

または、SAssignNew() を使って作成し、TSharedPtr メンバーを割り当て、以下に渡す:

    GEngine->GameViewport->AddViewportWidgetContent(
        SAssignNew(MyWidgetPtr, SWeakWidget)
        .PossiblyNullContent(MyWidgetClass)
    );

ビューポートからウィジェットを削除する

以前に追加したウィジェットへの参照を GameViewportClient::RemoveViewportWidgetContent() に渡すことで、ビューポートからスレート ウィジェットを個別に削除することができます。

例:

    GEngine->GameViewport->RemoveViewportWidgetContent(
        SNew(MyWidgetPtr.ToSharedRef())
    );

さらに、GameViewportClient::RemoveAllViewportWidgets() を呼び出すと、ビューポートからすべてのウィジェットを一度に削除することができます。

例:

    GEngine->GameViewport->RemoveAllViewportWidgets();

GEngineGameViewportNULL にできるため、メンバーを含め、これらにアクセスする前に 必ず値を確認してください。

タグ
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル