회전 행렬

CJB_ny·2023년 1월 6일
0

UE4

목록 보기
16/20
post-thumbnail

chapter12의 AI를 만들면서 거의 막바지 부분의 TaskNode를 c++클래스로 만들면서 다시 한번 회전 행렬부분이 등장해서 유튭영상이랑 구글링해서 정확한 원리까지는 아니지만

어느정도는 다시 이해하고 갈려고 정릴 함.

EBTNodeResult::Type UBTTask_TurnToTarget::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	EBTNodeResult::Type Result = Super::ExecuteTask(OwnerComp, NodeMemory);

	auto ABCharacter = Cast<AABCharacter>(OwnerComp.GetAIOwner()->GetPawn());
	if (nullptr == ABCharacter) return EBTNodeResult::Failed;

	auto Target = Cast<AABCharacter>(OwnerComp.GetBlackboardComponent()->GetValueAsObject(AABAIController::TargetKey));
	if (nullptr == Target) return EBTNodeResult::Failed;

	FVector LookVector = Target->GetActorLocation() - ABCharacter->GetActorLocation();
	LookVector.Z = 0.0f;
	FRotator TargetRot = FRotationMatrix::MakeFromX(LookVector).Rotator();
	ABCharacter->SetActorRotation(FMath::RInterpTo(ABCharacter->GetActorRotation(), TargetRot, GetWorld()->GetDeltaSeconds(), 2.0f));

	return EBTNodeResult::Succeeded;
}

여기서 LookVector를 구하는데

타겟과 나 사이의 벡터를 구한것임.
이 LookVector를 이용해서 회전 행렬을 구할 것임(아래의 코드가)

https://www.youtube.com/watch?v=DkRd2OtctRU

일단 위의 링크 보고 "아 회전 행렬이 이런거였지"다시 상기 시키고

https://3dmpengines.tistory.com/2057

라고 되어있다.

FRotationMatrix::MakeFromX(LookVector).Rotator();

왜 MakeFromX이냐? 플레이어든 뭐든 X축이 자신이 바라보고 있는 방향이라서.

이 부분이 LookVector방향으로 회전행렬을 생성한다는 말이다

X축 기준으로 얼마나 회전되었는지 계산한다는 말.

이 계산한 값을

ABCharacter->SetActorRotation(FMath::RInterpTo(ABCharacter->GetActorRotation(), TargetRot, GetWorld()->GetDeltaSeconds(), 2.0f));

RInterpTo를 통해 "회전 보간"을 한 부분임.

갑자기 확 바뀌면 안되니까 천천히 바뀌도록

현재 GetActorRotation에서 TargetRot로 2초동안 회전보간 한다는 것임.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글