[UE4] 두 액터의 회전각 구하기

윤정민·2023년 2월 14일
0

Unreal Engine

목록 보기
23/34
post-thumbnail

1. 서론

언리얼에서 액터 사이각을 구하기가 까다롭다. ActorRotation을 사용하면 쉽게 구할 수 있을 거라 생각했지만 범위가 정해져있지 않기 때문에 최소 사이각을 구하기 어렵다.
이 게시글에서는 벡터의 내적을 통해 사이각을 구하고 외적을 통해 회전각을 구한다.

2. 사이각및 회전각 구하기

1) 변수 정의

  • CenterLoc: 기준 액터의 위치(위 그림의 Actor역할)
  • CenterForward: 기준 액터의 Forward vector
  • TargetLoc: 사이각을 구하고자 하는 액터의 위치

2) 소스코드(For UE4)

float FindMiddleAngle(FVector TargetLoc, FVector CenterLoc, FVector CenterForward)
{
	//Center에서 Target을 바라보는 Vector
	FVector ToTargetVec = (TargetLoc - CenterLoc);

	ToTargetVec.Z = 0;
    ToTargetVec.Normalize();
    
    //내적 후 아크 코사인을 통해 각을 구함(0~180)
    float InnerProduct = FVector::DotProduct(CenterForward,ToTargetVec);
    float Degree = UKismetMathLibrary::DegAcos(InnerProduct);
    
    //외적으로 표면 벡터를 구해 Z의 값으로 부호를 구함
    FVector OutProduct = FVector::CrossProduct(CenterForward, ToTargetVect);
    float Sign = UKistmetMathLibrary::SignOfFloat(OutterProduct.Z);
    
    return Degree*Sign;
}
profile
그냥 하자

0개의 댓글