1
This commit is contained in:
@@ -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(),调用顺序是:
|
||||
@@ -276,4 +278,61 @@ 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;
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user