SetAinming상태 전환중 불안정한 카메라 전환 해결

  • 아래와 같이 단순 CameraBoom의 좌표변경으로는 전환이 매끄럽지않은 문제가 발생하여 구글링과 GPT를 비교해본 결과
void ACOECharacter::SetAiming(bool bNewAiming)
{

	if (bIsAiming)
		{
			// 조준 카메라로 전환
			// 속도 감소 등
			UE_LOG(LogTemp, Log, TEXT("IsAiming"));
			CameraBoom->SocketOffset = FVector(300.f, 80.f, 50.f);
		
		}
		else
		{
			// 기본 상태 복귀
			UE_LOG(LogTemp, Log, TEXT("IsNotAiming"));
			CameraBoom->SocketOffset = FVector(200.f, 80.f, 50.f);
		}
}
  • 아래와 같은 공통된 방법이 있어 코드를 수정하였으나 조준상태에서 벗어나지 못하는 문제가 발생
void ACOECharacter::SetAiming(bool bNewAiming)
{
	bIsAiming = bNewAiming;
	GetWorldTimerManager().ClearTimer(AimingInterpTimerHandle); // 이전 타이머 정리

	StartSocketOffset = CameraBoom->SocketOffset;
	TargetSocketOffset = bIsAiming
		? FVector(300.f, 80.f, 50.f)
		: FVector(200.f, 80.f, 50.f);


	InterpAlpha = 0.f;
	bInterpToAiming = bIsAiming;

	GetWorldTimerManager().SetTimer
	(
		AimingInterpTimerHandle,
		this,
		&ACOECharacter::UpdateAimingInterp,
		0.01f, // 10ms 간격
		true   // 반복 실행
	);
}

void ACOECharacter::UpdateAimingInterp()
{
	InterpAlpha +=  0.05f; // 0~1로 점점 증가 (속도 조절 가능)

	FVector NewOffset = FMath::Lerp(StartSocketOffset, TargetSocketOffset, InterpAlpha);
	CameraBoom->SocketOffset = NewOffset;

	if (InterpAlpha >= 1.0f)
	{
		CameraBoom->SocketOffset = TargetSocketOffset;
		GetWorldTimerManager().ClearTimer(AimingInterpTimerHandle);
	}
}
  • 아래의 사진에 표시한 한계치들을 짧게 하여 우클릭을 누르자마자 길게누르기 판정을 줘 해결함

' > 포트폴리오' 카테고리의 다른 글

포트폴리오 log #6  (0) 2025.08.05
포트폴리오 log #5  (2) 2025.07.31
포트폴리오 log #4  (4) 2025.07.17
포트폴리오 log #2  (0) 2025.07.15
포트폴리오 log #1  (0) 2025.07.11

+ Recent posts