This commit is contained in:
2025-08-31 23:34:27 +08:00
parent eeb35a11ad
commit 24b58ac250

View File

@@ -216,7 +216,9 @@ void ULyraHeroComponent::InitializePlayerInput(UInputComponent* PlayerInputCompo
2. AddMappingContext()的选项OptionsNotifyUserSettings设置为true会调用UEnhancedInputUserSettings::RegisterInputMappingContext()
2. ProjectSettings - Engine - EnhancedInput - UserSettings中的Enable User Settings
3. 配置IA与IMC中的UserSetting选项。
1. 部分输入比如Axis2D
1. 部分输入比如Axis2D这种需要在IMC中进行设置。
4. 默认Profile GameplayTag
1.
## 加载按键设置逻辑
默认自动加载载入逻辑位于UEnhancedInputUserSettings::LoadOrCreateSettings(),调用顺序是:
@@ -277,3 +279,60 @@ UEnhancedInputUserSettings* UEnhancedInputUserSettings::LoadOrCreateSettings(ULo
return Settings;
}
```
## 鼠标灵敏度与反转设置实现
参考Lyra的实现方法
1. 通过实现2个UInputModifier。
2. 在ULyraSettingsShared(ULocalPlayerSaveGame)存储对应的灵敏度float数据。
1. 可以考虑直接在UEnhancedInputUserSettings中来存储。
```c++
//////////////////////////////////////////////////////////////////////
// ULyraInputModifierGamepadSensitivity
FInputActionValue ULyraInputModifierGamepadSensitivity::ModifyRaw_Implementation(const UEnhancedPlayerInput* PlayerInput, FInputActionValue CurrentValue, float DeltaTime)
{
// You can't scale a boolean action type
ULyraLocalPlayer* LocalPlayer = LyraInputModifiersHelpers::GetLocalPlayer(PlayerInput);
if (CurrentValue.GetValueType() == EInputActionValueType::Boolean || !LocalPlayer || !SensitivityLevelTable)
{
return CurrentValue;
}
ULyraSettingsShared* Settings = LocalPlayer->GetSharedSettings();
ensure(Settings);
const ELyraGamepadSensitivity Sensitivity = (TargetingType == ELyraTargetingType::Normal) ? Settings->GetGamepadLookSensitivityPreset() : Settings->GetGamepadTargetingSensitivityPreset();
const float Scalar = SensitivityLevelTable->SensitivtyEnumToFloat(Sensitivity);
return CurrentValue.Get<FVector>() * Scalar;
}
//////////////////////////////////////////////////////////////////////
// ULyraInputModifierAimInversion
FInputActionValue ULyraInputModifierAimInversion::ModifyRaw_Implementation(const UEnhancedPlayerInput* PlayerInput, FInputActionValue CurrentValue, float DeltaTime)
{
ULyraLocalPlayer* LocalPlayer = LyraInputModifiersHelpers::GetLocalPlayer(PlayerInput);
if (!LocalPlayer)
{
return CurrentValue;
}
ULyraSettingsShared* Settings = LocalPlayer->GetSharedSettings();
ensure(Settings);
FVector NewValue = CurrentValue.Get<FVector>();
if (Settings->GetInvertVerticalAxis())
{
NewValue.Y *= -1.0f;
}
if (Settings->GetInvertHorizontalAxis())
{
NewValue.X *= -1.0f;
}
return NewValue;
}
```