♻️
【UE5】C++でEnhancedInputで使えるInputTriggerを自作してAnyKeyのスティックの値を無視するようにする
概要
この記事は一人アドベントカレンダー by ダリアの9日目の記事です。
今回は下記のようにEnhancedInputで使えるTriggerを自作して、AnyKeyで呼ばれるスティックの入力を無視してスティック入力してもイベントが呼ばれないようにしてみたので、それをまとめた記事になります。
想定してるイメージは以下になります。
環境
UE5.4.4
やり方
必要なのは以下の2つです。
-
UInputTrigger
を継承したクラスを作る -
UpdateState_Implementation
を実装する
実際に実装したソースコードは以下になります。
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "InputTriggers.h"
#include "InputTriggerIgnoreStick.generated.h"
/**
*
*/
UCLASS(NotBlueprintable, meta=(DisplayName="IgnoreStick"))
class UInputTriggerIgnoreStick : public UInputTrigger
{
GENERATED_BODY()
public:
virtual ETriggerEventsSupported GetSupportedTriggerEvents() const override { return ETriggerEventsSupported::Instant; }
protected:
virtual ETriggerState UpdateState_Implementation(const UEnhancedPlayerInput* PlayerInput, FInputActionValue ModifiedValue, float DeltaTime) override;
};
#include "InputTriggerIgnoreStick.h"
#include "EnhancedPlayerInput.h"
ETriggerState UInputTriggerIgnoreStick::UpdateState_Implementation(const UEnhancedPlayerInput* PlayerInput,
FInputActionValue ModifiedValue, float DeltaTime)
{
//入力されてなければその時点で無効
if(!IsActuated(ModifiedValue))
{
return ETriggerState::None;
}
float StickX = 0.0f;
float StickY = 0.0f;
StickX = PlayerInput->GetKeyValue(EKeys::Gamepad_LeftX);
if(StickX != 0.0f)
{
return ETriggerState::None;
}
StickY = PlayerInput->GetKeyValue(EKeys::Gamepad_LeftY);
if(StickY != 0.0f)
{
return ETriggerState::None;
}
StickX = PlayerInput->GetKeyValue(EKeys::Gamepad_RightX);
if(StickX != 0.0f)
{
return ETriggerState::None;
}
StickY = PlayerInput->GetKeyValue(EKeys::Gamepad_RightY);
if(StickY != 0.0f)
{
return ETriggerState::None;
}
return ETriggerState::Triggered;
}
後は冒頭のスクショの様に自作したInputActionにInputTriggerを設定し、InputMappingContextにAnyKey(いずれかのキー)を設定し、スティック入力してもイベントが呼ばれなければ成功です。
以上で記事は終わりです。
ここまで読んでいただきありがとうございました。
参考になれば幸いです。
参考
UE5 「Enhanced Input」で同時入力(〇〇を押しながら△△)を実装する(Chorded Actionc、Input Action、Input Mapping Context)
ソースコード
Engine\Plugins\EnhancedInput\Source\EnhancedInput\Public\InputTriggers.h
Discussion