Я не понимаю, как в вашей реализации получается, что мы переписываем геттер GetMaxSpeed(), который просто возвращает значение и при этом в игре меняется MaxWalkSpeed. Мы даже не вызываем этот геттер в своих классах. Я так подозреваю, что наш новый GetMaxSpeed() используется где-то в AddMovementInput(), но подтверждения я в референсах не нашёл. Не могли бы вы внести ясность?
AddMovementInput устанавливает вектор направления в компоненте движения (если он существует):
Сам компонент отвечает за то, как положение персонажа будет изменяться в зависимости от разных параметров и условий.
Функция GetMaxSpeed используется во многиx функциях внутри компонента. Например, в CalcVelocity (код не полный, функция большая, понимать код не обязательно, это детали реализации):
void UCharacterMovementComponent::CalcVelocity(float DeltaTime,float Friction,bool bFluid,float BrakingDeceleration){ // Do not update velocity when using root motion or when SimulatedProxy and not simulating root motion - SimulatedProxy are repped their Velocity
if (!HasValidData() || HasAnimRootMotion() || DeltaTime < MIN_TICK_TIME || (CharacterOwner && CharacterOwner->GetLocalRole() == ROLE_SimulatedProxy && !bWasSimulatingRootMotion))
{return; } Friction = FMath::Max(0.f, Friction);constfloat MaxAccel =GetMaxAcceleration();float MaxSpeed =GetMaxSpeed(); // Check if path following requested movementbool bZeroRequestedAcceleration =true; FVector RequestedAcceleration = FVector::ZeroVector;float RequestedSpeed =0.0f; if (ApplyRequestedMove(DeltaTime, MaxAccel, MaxSpeed, Friction, BrakingDeceleration, RequestedAcceleration, RequestedSpeed))
{ bZeroRequestedAcceleration =false; }...}
Таким образом, переопределяя данную функцию, мы изменяем максимальную скорость персонажа.