人物瞄准鬼畜问题

人物瞄准近距离的位置会出现鬼畜情况

根据代码分析,发现如果Diretion的起始位置为MuzzleLoc时 人物瞄准近距离时会鬼畜,而使用PawnLoc时则不存在这样的问题,问题在于MuzzleLocation是一个实时变动的值,它附着于人物武器的枪口上,所以在瞄准近距离的地方时,方向向量的变化会非常大,并且会一直变换,所以导致人物的瞄准方向(变量Direction)一直在改变,且变化幅度很大。

void AHaliPlayerController::Turn(float Value)
{
    if (Value != 0.f)
    {
        FHitResult TraceHitResult;
        GetHitResultUnderCursor(ECC_Visibility, true, TraceHitResult);
        FVector CursorLoc = TraceHitResult.Location;
        FVector MuzzleLoc = PlayerCharacter->GetMuzzleLocation();
        FVector PawnLoc = PlayerCharacter->GetActorLocation();
        FVector Direction = CursorLoc - MuzzleLoc;

        FRotator NewPawnRotation = Direction.Rotation();
        float PawnYaw = GetPawn()->GetActorRotation().Yaw;
        float NewPawnYaw = NewPawnRotation.Yaw;

        float NewPawnAngle = NewPawnYaw;
        float PawnAngle = PawnYaw;

        if (Value != 0.0f && PawnYaw != NewPawnYaw)
        {
            SetControlRotation(NewPawnRotation);
        }

        PlayerCharacter->SetAimPitch(Direction);
    }
}

 

posted @ 2020-10-14 11:57  当麻  阅读(147)  评论(0编辑  收藏  举报