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); } }