UE4でキーコンフィグの実装
前回キーマッピング操作系関数をBPに公開したので、ついでにキーコンフィグも作っていく
miyahuji111.hatenablog.com
ここで作った関数に追加で、現在どのキーが割り当てられているのか取得する関数が必要
.h
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Input") static void GetCurrentActionMapping(const FName actionName, FKey& key); UFUNCTION(BlueprintCallable, BlueprintPure, Category = "Input") static void GetCurrentAxisMapping(const FName actionName, const float scale, FKey& key);
.cpp
void UBlueprintFunctionLibrary1::GetCurrentActionMapping(const FName actionName, FKey& key) { const TArray<struct FInputActionKeyMapping> ActionMappings= GetMutableDefault<UInputSettings>()->ActionMappings; for (int32 ActionIndex = ActionMappings.Num() - 1; ActionIndex >= 0; --ActionIndex) { if (ActionMappings[ActionIndex].ActionName == actionName) { key = ActionMappings[ActionIndex].Key; break; } } } // AxisMappingはscale 1.0 -1.0二つ割り当てられてる可能性があるのでScaleの一致が必要 void UBlueprintFunctionLibrary1::GetCurrentAxisMapping(const FName actionName, const float scale, FKey& key) { const TArray<struct FInputAxisKeyMapping> AxisMappings = GetMutableDefault<UInputSettings>()->AxisMappings; for (int32 AxisIndex = AxisMappings.Num() - 1; AxisIndex >= 0; --AxisIndex) { const FInputAxisKeyMapping& KeyMapping = AxisMappings[AxisIndex]; if (AxisMappings[AxisIndex].AxisName == actionName && AxisMappings[AxisIndex].Scale == scale) { key = AxisMappings[AxisIndex].Key; break; } } }
あとはWidgetのキーイベントでわちゃわちゃ適当にやる、本当に適当なので参考にしないでください
Widgetのテキストバインドの部分もそのままこの関数が使えるし、ゲーム内の字幕とかでも使える
重複判定とかデフォルトに戻すとかは、まあ多分いろんな方法でできると思うので、これをたたき台にしていく
参考
Unreal Engine | UPlayerInput
Unreal Engine | FInputActionKeyMapping
Unreal Engine | FInputAxisKeyMapping
UE4 UMGで入力を取得する - GameProgrammar's Night