▣ 애니메이션 블루프린트에 노드처럼 c++ 코드에서도 먼저 Angle 변수선언을 하고 CalculateDirection() 함수를 호출하여 필요한 데이터를 매개변수에 넣고 저장합니다.
▣ 코드설명
// 이동 방향에 따른 캐릭터 방향 계산 (애니메이션 블렌딩에 사용)
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);
▣ 컴파일 후 애니메이션블루프린트에 스테이트머신에서 블랜드스페이스에 변수에 값을 연결하고 플레이를 하면 방향에 맞게 블랜드스페이스 애니메이션이 실행됩니다.
'[ Unreal5 ] > - 언리얼엔진5 실습' 카테고리의 다른 글
언리얼엔진5 Inventory DataTable save (0) | 2024.05.06 |
---|---|
언리얼엔진5 Inventory Widget (1) | 2024.05.06 |
언리얼엔진5 c++ CharacterMovement (0) | 2024.05.04 |
언리얼엔진5 c++ BehaviorTree(BTService 생성 및 사용) (0) | 2024.04.30 |
언리얼엔진5 c++ BehaviorTree(BTTask 생성 및 Character 호출) (0) | 2024.04.29 |
댓글