본문 바로가기

카테고리 없음

UE5 C Class Rotation 시키기 - AddActorLocalRotation()

RotationActor.cpp
0.00MB
RotationActor.h
0.00MB

인스턴스 생성후 회전하는 클래스를 만들어 보겠다.

부모클래스를 액터로 하고 이름을 RotationActor로 한다. 스스로 돌기만 하면되기 때문이다.

Visual Studio로 이동후 모두 다시로드를 클릭해준다.

RotationActor.cpp와 RotationActor.h 2개의 파일이 새로 생성되었다.

앞과 동일한 요령으로

RotationActor.h에 다음 코드 추가

	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* Mesh;

RotationActor.cpp에 Mesh= 부터 추가해준다. 

ARotationActor::ARotationActor()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
	Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));
	ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("/Game/StarterContent/Props/SM_Couch.SM_Couch"));
	if (SM.Succeeded()) {
		Mesh->SetStaticMesh(SM.Object);
	}
}

이번에는 도는걸 확실히 보기 위해 StartContents>Props폴더의 SM_Counch를 Ctrl-C해서 SM(TEXT(" 에 붙여주고 위와 같이 /Game이후를 남겨둔다.

저장후 언리얼에서 라이브코딩후 C++Classes > 프로젝트명 아래 클래스가 잘 생성되어 있을것이다.

이제 회전을 위한 코드를 RotationActor.h  맨 밑에 추가해 보겠다.

	float RotationSpeed = 30.0f;

RotationActor.cpp Tick()함수를 다음과 같이 변경해준다.

void ARotationActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	AddActorLocalRotation(FRotator(0.f, 0.f, RotationSpeed * DeltaTime));
}

AddActorLocalRotation()는 액터에 추가적인 회전을 시켜주는 함수인데 파라미터로 FVector가아닌 FRotator()를 받는다.

FRotator는 X,Y,Z가 아닌 다음과 같은 계수를 받는데 Z축(수직)으로 회전 시키려면 가운데 Roll에 값을 넣어야 한다.

저장후 라이브코딩후 클래스를 뷰포트에 배치해서 인스턴스를 만들어준후 플레이 해보면 쇼파가 잘돈다.