なれはて日記

ざんぞうです

UE4/C++ Tickでキーボード入力やゲームパッド入力を監視する

日記を書くのはとてもお久しぶりです。
UE4を始めたので気力があれば残していきたい。

PlayerControllerが入力系握っているようなのでPlayerControllerに監視してもらいます。
ちゃんとやるなら結果も保持してアクターから参照される形ででしょうか。
UE4的な作法が全然わかっていませんのでどなたかヘルプ!

MyPlayerController.h

PlayerControllerを継承したクラスを作成します。
UE4Editorから作成するとTick関数がなかったためActorから拝借。

// MyPlayerController.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "MyPlayerController.generated.h"

UCLASS()
class PROGQUICKSTART_API AMyPlayerController : public APlayerController
{
	GENERATED_BODY()
	
public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;
};

MyPlayerController.cpp

EKeys構造体にキーボードのキーとゲームパッドのキーが定義されているので利用します。VRなデバイスにも対応しています。
IsInputKeyDown(EKey)はキーが押されている間Trueを返します。
GetInputKeyTimeDown(EKey)で押下時間が取れます。

// MyPlayerController.cpp
#include "MyPlayerController.h"
#include "GameFramework/PlayerInput.h"

void AMyPlayerController::Tick(float DeltaTime)
{
	// Actorなどで監視する場合はPlayerControllerを取得する必要がある
	// APlayerController* pc = UGameplayStatics::GetPlayerController(this, 0);

	// キーボード入力の監視
	FKey key = EKeys::P;
	if (IsInputKeyDown(key))
	{
		float time = GetInputKeyTimeDown(key);
		// *FStringで内部のchar*が取れる
		UE_LOG(LogTemp, Log, TEXT("press %s: %f"), *key.ToString(), time);
	}
}