[Unreal_C++_DarkSoul]#12_Targeting 회전 속도
Player의 Targeting 동작 수행 시 발생하는 부자연스러운 회전 속도 문제를 해결합니다.
Unreal 포트폴리오 작업 과정을 기록합니다.
Overview
- 문제
- 해결
- 결과 화면
문제
- Player의 Targeting 동작 수행 과정에서 발생하는 부자연스러운 회전 동작
- Player의 Targeting 동작으로 인해 부자연스러운 연출이 불가피합니다.
문제 해결
1. TargetComponent::FocusOnTarget()
/*****************************************************************************************
*
* [Remark]: Targeting 선형 보간
*
* 목적:
* Target Lock이 켜져 있을 때, Target Enemy로 선정된 Actor를 바라보도록 합니다.
* 설명:
* #1 Player Location과 Enemy Location을 활용하여 LookAtRotation 값을 구합니다.
* #2 Camera의 지나치게 빠른 최전으로 어지러움 증상을 호소하기 이전에 RInterpTo 를 통해 선형 보간 적용
* #3 Controller Rotation을 위에서 구한 회전 값으로 설정합니다.
*
*****************************************************************************************/
void UC_TargetComponent::FocusOnTarget(float DeltaTime)
{
AActor* OwnerActor = GetOwner();
CheckNull(OwnerActor);
ACharacter* OwnerCharacter = Cast<ACharacter>(OwnerActor);
CheckNull(OwnerCharacter);
CheckFalse(TargetingLockOn);
CheckNull(TargetEnemy);
// #1. FindLookAtRotation
APlayerCameraManager* CameraManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager;
FVector Start = CameraManager->GetCameraLocation();
FVector Target = TargetEnemy->GetActorLocation();
// #2. Interpolation
FRotator StartRotation = OwnerCharacter->GetControlRotation();
FRotator TargetRotation = UKismetMathLibrary::FindLookAtRotation(Start, Target);
FRotator FinalRotation = UKismetMathLibrary::RInterpTo(StartRotation, TargetRotation, DeltaTime, InteropSpeed);
OwnerCharacter->GetController()->SetControlRotation(FRotator(0.f, FinalRotation.Yaw, 0.f));
}
Details
- Target Component의 "FocusOnTarget" 함수는 Player의 회전 값을 "FindLookAtRotation()"을 통해 변환합니다.
- Player의 위치 --- Target 적의 위치를 통해 회전 값을 얻어 Player의 회전 값을 변환하는 과정에서 Player의 카메라가 갑작스럽게 회전하여 부자연스러운 연출이 불가피해 보입니다.
- 따라서, "RInterpTo()" 함수를 통해 현재 회전 값에서 목표 회전 값으로 "선형 보간"을 통해 부드럽게 변환하도록 연출합니다.
결과 화면
'개인프로젝트' 카테고리의 다른 글
[Unreal_C++_DarkSoul]#14_문제 해결, Actor Component 간 소통 (0) | 2023.03.26 |
---|---|
[Unreal_C++_DarkSoul]#13_기능 구현, Impact Effect (0) | 2023.02.05 |
[Unreal_C++_DarkSoul]#11_기능 구현, Parkour(Vaulting) (0) | 2022.12.25 |
[Unreal_C++_DarkSoul]#10_문제 해결, AIController (0) | 2022.12.25 |
[Unreal_C++_DarkSoul]#9_기능 구현, Status Effect 기능 (0) | 2022.12.18 |