본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ Aim

by MRG 2024. 5. 26.
728x90
반응형

 

▣ 먼저 Rotator 값을 저장할 변수를 선언합니다.

 

 

▣ cpp로가서 DeltaRotator함수를 사용하기 위해 헤더를 추가합니다. 

 

 

 

▣ 코드설명
// 이동 방향에 따른 캐릭터 방향 계산 (애니메이션 블렌딩에 사용)
float Angle = UAnimInstance::CalculateDirection(Velocity, Owner->GetActorRotation());
// Velocity: 현재 캐릭터의 속도 벡터
// Owner->GetActorRotation(): 현재 액터의 회전 값 (방향)
// 결과적으로 Velocity가 현재 회전 방향과 얼마나 차이 나는지를 도(degree)로 반환 (애니메이션 방향 블렌딩에 사용)

// 카메라 방향과 캐릭터 방향의 차이를 정규화하여 계산
FRotator DeltaRotator = UKismetMathLibrary::NormalizedDeltaRotator(
    Owner->GetActorRotation(),           // 기준이 되는 방향: 캐릭터의 현재 회전
    Owner->GetControlRotation()          // 목표 방향: 플레이어가 컨트롤하는 방향(카메라 방향)
);
// 결과적으로 카메라(또는 컨트롤) 방향과 캐릭터 실제 회전 방향의 차이를 계산
// 정규화된 회전값으로 반환되어 -180~180도 사이 값을 가짐

// 조준 방향 저장: Roll은 무시하고 Yaw와 Pitch만 반영
AimRotator = FRotator(
    0.0f,                 // Roll 값은 사용하지 않음
    DeltaRotator.Yaw,    // 좌우 회전 차이 (Yaw)
    DeltaRotator.Pitch   // 상하 회전 차이 (Pitch)
);
// 최종적으로 AimRotator는 조준 방향을 나타냄
// 이를 통해 상체는 카메라를 따라 조준, 하체는 이동 방향을 유지하는 애니메이션 분리 가능


▣ 회전제한 
// Pitch를 -90도 ~ 90도 사이로 제한
AimRotator.Pitch = FMath::Clamp(AimRotator.Pitch, -90.0f, 90.0f);

// Yaw도 -180~180 대신 특정 범위로 제한하고 싶을 경우
AimRotator.Yaw = FMath::Clamp(AimRotator.Yaw, -90.0f, 90.0f);

 

 

▣ 위에 블루프린트 이미지처럼 c++ cpp에서 Owner에 접근하여 Rotation()을 가져와서 DeltaRotator함수로 계산한 다음 DeltaRotator에 값을 반환하고 AimRotator에 회전값 기준에 맞게 값을 대입합니다.

 

 

▣ 애니메이션 블루프린트에서 Transform Bone을 추가하고 Aim Rotator 연결하고 Bone과 Rotation Mode를 설정합니다. 

 

 

▣ 컴파일 저장 후 마우스 위아래를 회전하면서 확인합니다. 

728x90
반응형

댓글