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?