UE4のC++入門について

C++で、キーを入力するとメニュー画面ぽいのが出てくる処理をやりたく、 web上にある様々な資料を見て、やってみたのですが、ブループリントの資料ばかりでよく意味が分かりません。 デフォルトの1人称視点の弾を撃つ処理を行っているクラスを利用して、Tボタンを押したというのは、判断できるのですが、そこから、画面を出すことができず、悩んでいます。

また、サーバだけで行う処理を書きたいのですが、これについては調べ方が悪いのか、資料が全くなく困っています。

一応、QtやDXlibなどを触ったことがあるし、C++の文法とかは大丈夫だと思いますし、 Dxlibで3Dゲームを簡単なところまで作ったことであるので、3Dの知識は入門程度は大丈夫だと思うのですが、
いいUE4のC++資料がありましたら、教えてください。

C++でウィジェットを作成&表示させる場合、まずヘッダファイルに以下のような変数を定義します。

UPROPERTY(EditDefaultsOnly, Category = "UI")
TSubclassOf UseWidgetClass;
UUserWidget* MyWidget;

この時ヘッダ上部に

class UUSerWidget;

と前方宣言をします。
続いてCPPのTキーが押された時に呼び出される関数内に

MyWidget = CreateWidget(GetWorld(), UseWidgetClass);
if (MyWidget)
{
	MyWidget->AddToViewport();
}

と書きます。ここでウィジェットの作成とビューポートへの追加を行っています。
この時 ** #include “UserWidget.h” ** を忘れずに追加してください。

UserWidgetを取り扱う場合は プロジェクト名.Build.csPublicDependencyModuleNames に ** “UMG” ** を追加してください。追加をし忘れた場合はリンカエラーとなります。

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", /*追加*/"UMG" });

次にサーバーだけで行う処理ですが
** if (Role == ROLE_Authority) **
と書くことで、このプログラムを実行しているマシンがサーバー側かを調べられます。

先程のウィジェットの作成&画面表示を
** if (Role == ROLE_Authority) **
で囲むとサーバー側のみウィジェットが作成され、クライアント側はキーを押しても何も生成されないという処理が出来ます。

素早い返答ありがとうございます。
お陰様でできました。私がちょっと抜けてたところがあったので、下記に書いておきます。

MyProject2.Build.cs

PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay" , "UMG" });
PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" };

UMGとSlateの記述を追加。

Character.h上部

#include "Runtime/CoreUObject/Public/UObject/ConstructorHelpers.h"
#include "UserWidget.h"

Character.cppのキー入力時の処理

		// menuキーが押されたら
		if (this->bmenu == 1 && this->menuflag == false)
		{
			this->menuflag = true;
			MyWidget = CreateWidget<UUserWidget>(GetWorld(), UseWidgetClass);

			if (MyWidget)
			{
				MyWidget->AddToViewport();
			}

			UE_LOG(LogTemp, Warning, TEXT("Hello! IN %d"), 22);
		}
		// menuキーから指が離れたら
		if (this->bmenu == 0 && this->menuflag == true)
		{
			this->menuflag = false;

			if (MyWidget)
			{
				MyWidget->RemoveFromParent();
			}

			UE_LOG(LogTemp, Warning, TEXT("Hello! OUT %d"), 22);
		}

Character.cppのコンストラクタ

static ConstructorHelpers::FClassFinder<UUserWidget> WidgetAsset(TEXT("/Game/FirstPerson/menu"));
	if (WidgetAsset.Succeeded())
	{
		// Assign the class of the loaded asset to the WigetClass variable, which is a "subclass" of UUserWidget : Which our asset class is 
		UseWidgetClass = WidgetAsset.Class;
	}

あとは、/Game/FirstPersonでmenuという名前のウィジェットブループリントを作って、適当に文字でも書いておけば問題ないですね。

返答ありがとうございました。