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

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

Choose your operating system:

Windows

macOS

Linux

スレート ウィジェットをインゲームで使用して、 ヘッドアップ ディスプレイ (HUD) やメニューなどのその他のユーザー インターフェース (UI) を作成することができます。通常はコンテナ ウィジェットという、それぞれが UI 固有の特性を持つ、様々なタイプのウィジェットで構成されるウィジェットを 1 つ以上作成します。

例えば、ゲームの 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" });

ウィジェットの表示

ゲーム内にスレッド ウィジェットを表示するために、ゲームのビューポートに追加しなければなりません。Overlaid ウィジェットは Z 順序値が降順で 表示されます。

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

ゲームのビューポートは、 GameViewportClient のインスタンスです。現在のゲーム ビューポートへのリファレンスへは、 アンリアル エンジンの GameViewport メンバー経由でアクセスできます。 そして、 GameViewport メンバーには、ゲームの現在の UEngine インスタンスへ GEngine グローバル ポインタを使用してアクセスできます。

例:

GEngine->GameViewport

GEngine GameViewport NULL にできるので、 メンバーを含めてアクセス前に必ず値を確認してください。

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

スレート ウィジェットは、リファレンス、正確には 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() を呼び出すと、 1 度にビューポートから取り除くことができます。

例:

GEngine->GameViewport->RemoveAllViewportWidgets();

GEngine GameViewport NULL にできるので、 メンバーを含めてアクセス前に必ず値を確認してください。

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