개인 프로젝트의 사격과 관련된 내용입니다.
반동 구현
반동계산 함수
FVector ALSWeaponInstance::CalculateRecoil(FVector AimDir, const float HalfAngle)
{
if (HalfAngle > 0.f)
{
const float AngleAround = FMath::FRandRange(0.f, 1.f) * 360.0f;
FRotator Rot = AimDir.Rotation();
FQuat DirQuat(Rot);
FQuat FromCenterQuat(FRotator(0.0f, HalfAngle, 0.0f));
FQuat AroundQuat(FRotator(0.0f, 0.0f, AngleAround));
FQuat FinalDirectionQuat = DirQuat * AroundQuat * FromCenterQuat;
FinalDirectionQuat.Normalize();
return FinalDirectionQuat.RotateVector(FVector::ForwardVector);
}
else
{
return AimDir.GetSafeNormal();
}
}
반동에 따른 총구 이동
- 카메라 이동을 통해 조준점을 이동시켰습니다.
FVector TempVector = CalculateRecoil((FRotationMatrix(Camera->GetComponentRotation()).GetUnitAxis(EAxis::X)),
GetCurrentSpreadAngle());
GetController()->SetControlRotation(TempVector.Rotation());
Leave a comment