less than 1 minute read

개인 프로젝트의 사격과 관련된 내용입니다.

반동 구현

반동계산 함수

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