Download

Problemas ao atualizar vetor todo frame com event input

Não tive sucesso postando no Answerhub.
Estou tentando mover um vetor sempre que movo minha camera (para que ele se mova com a camera) e ao mesmo tempo seguro o botao do mouse (bPerformingAction).
Esse vetor que preciso mover aponta para onde está minha mira:

 APRT_Character::APRT_Character() { 
    VectorToMove = GetAimLocation(); 
 }

Eu salvo numa outra variável o valor do vetor no frame atual para que eu possa usar no frame seguinte:

 void APRT_Character::Tick(float DeltaSeconds)
 {
     Super::Tick(DeltaSeconds);
     
     VectorValLastFrame = VectorToMove;
 }

Eu tento mover o vetor utilizando as funções AddControllerPitchInput e AddControllerYawInput, elas são chamadas todo frame e quando o parametro delas é != 0 significa que estou movendo minha camera com o mouse naquele frame, também verifico se estou performando uma in-game action:

 void APRT_Character::AddControllerPitchInput(float Val)
 {
     Super::AddControllerPitchInput(Val);
     if(Val != 0.0f && bPerformingAction){
        MoveVector();
     }
 }
 
 void APRT_Character::AddControllerYawInput(float Val)
 {
     Super::AddControllerYawInput(Val);
     if(Val != 0.0f && bPerformingAction){
        MoveVector();
     }
 }

Eu calculo quanto ele tem que se deslocar usando a diferença entre a posição atual da minha mira e a posição do vetor no último frame:

 void APRT_Character::MoveVector()
 {
     VectorToMove += GetAimLocation() - VectorValLastFrame ;
 }

Funciona tudo perfeito, se eu movo meu mouse rápido. Se eu movo ele devagar o vetor não se desloca. Quanto mais eu diminuo o framerate máx do jogo, menos o problema acontece, se eu deixo ele ~5fps o problema já não acontece mais.
A ordem das funções está correta, os inputs vem primeiro, eles chamam a MoveVector e por ultimo vem o Tick.
Eu gravei um video onde desenho uma linha que vai do meu personagem até o VectorToMove:
h - YouTube, nesse caso o jogo está a 120fps.
Alguma ideia do que possa ser o erro?

Ficou um pouco confuso pra mim, mas seu problema para estar na função MoveVector():

A distância do último vetor pra subtrair da posição da mira pode ser muito pequena entre os frames e por isso fica bem lenta.
Se você quiser que a mira não se mova na mesma velocidade da câmera você pode usar outra função:

		const FVector VectorToMove = FMath::VInterpConstantTo(OndeEstaVector, PraOndeIrVector, DeltaTime, VelocidadeDoMovimento);

No geral o que eu diria é: para você usar uma variável para a Velocidade do movimento e o DeltaTime que é um valor ‘independente’ de FPS ( quanto maior FPS menor o DeltaTime e vice versa ).
Por que se você não usar fica dependente do FPS, como está acontecendo.