본문 바로가기
Unreal C++/C++ - History

13 C++ 기초 - Rotate 기능 제작 / Obstacle Assault

by pp336 2024. 12. 29.

 

 

 

 

 

 

 

 

 

 


 

RotatePlatfom 함수 선언

 

 

 

  RotatePlatform을 기능을 추가하는 과정은 기존의 Location을 제작하는 과정과 유사하다. 일단
12 C++ 기초 - 객체지향 프로그래밍 / Obstacle Assault
에서 MovePlatform기능에 관한 함수를 구분하여 정리하는 작업을 선행하였다.  마찬가지로 RotatePlatform의 기능도 구분을 위해 MovingPlatform.h에서 별도의 함수 선언을 해주는 작업을 진행을 해놓고 세부 기능 작성으로 들어가야한다. 

 

 

Header -  MovingPlatformReview.h

 

 

 

 

cpp -  MovingPlatformReview.cpp

 

cpp에서는  RotatePlatform(); 함수를 작성해주고, 관련 내용을 작성해 줄  void AMovingPlatformReview::RotatePlatform() 을 연결해주는 작업까지 진행한다.

이제 RotatePlatform은 회전에 관한 클래스만 담당하는 별도의 클래스 제작 없이 MovingPlatfom 클래스에 통합되었다.

 

 

 

 


FRotator

 

 

 

 위치와 관련 된 작업을 할때 액터의 위치를 알기 위해서 GetActorLocation을 사용했다. 회전에서도 GetActorRotation을 사용하여 액터의 회전과 관련된 요소들을 얻을 수 있다.

 

 

cpp -  MovingPlatformReview.cpp

 

 

 

GetActorRotation에 마우스 커서를 대보면 FRotator와 관련되었으며 현재 액터의 RootComponent의 회전 값을 반환함을 알 수 있다.

 

 

 

 

 

1. 07 C++ 기초 개념 및 기능 제작 에서 Location 관련 작업을 했을 때와 같은 방식으로 나머지 과정을 동일하게 작성해준다.

 

 

Header -  MovingPlatformReview.h

 

UPROPERTY(EditAnywhere, Category="Rotation")
FRotator RotationVelocity;

 

 

 

cpp -  MovingPlatformReview.cpp

 
void AMovingPlatformReview::RotatePlatform()
{
	FRotator CurrentRotation = GetActorRotation();
	CurrentRotation = CurrentRotation + RotationVelocity * DeltaTime;
	SetActorRotation(CurrentRotation);
}

 

DeltaTime은 별도의 매개 변수로 RotatePlatform() 함수에 해당 내용을 입력해주어야 한다.

 

 

 

 

 

 

 

 

 

 

 

 


AddActorLocalRotation

 

 

 

 위에서  작업완료한 방식은 조금 복잡 경우는 제대로 작동하지 않는 상황이 나온다.(-90도 까지 작동하면 +90도 까지 값을 반환하는 형식의 회전). 그래서 회전에서 사용되는 경우에 맞닥드리는 예외사항 문제들에 대응이 가능한  AddActorLocalRotation 함수를 기존 작성해둔 코드 대신에 사용한다.

 

 

cpp -  MovingPlatformReview.cpp

void AMovingPlatformReview::RotatePlatform()
{
	AddActorLocaRotation(RotationVelocity * Deltatime);
}