Unreal 게임 개발 과정 TIL

Today's I Learning

본캠프 TIL

06.09 Unreal 본캠프) 3번 과제 회전발판과 움직이는 장애물

Sunlight__ 2026. 6. 9. 21:33

 

오늘 한 것

오늘 목표

 - 서로 다른 Actor 클래스 2개 이상 구현

 : 언리얼 에디터에서 "New C++ Class" 를 만들어준다.

   액터 클래스로 이름을 각각 "MoveActor", "SpinActor"로 설정해주었다.

 

 - Tick 함수 기반 동적 Transform 변경

 : 지난 시간에 배운 것들을 활용해서 루트 컴포넌트 설정 및 스태틱 메쉬를 설정해준다.

좌) SpinActor.h 우) SpinActor.cpp

  회전 속도를 조절하기 위한 변수를 선언 및 정의한다.

좌) SpinActor.h 우) SpinActor.cpp

 - Tick 함수에서 AddActorRotation() 함수를 활용해 Rotation 값을 변경해준다.

SpinActor.cpp

 

 : if 문을 사용해 RotationSpeed가 0이 아니라면 회전 처리를 해준다.

   - 핵심 : RotationSpeed에 DeltaTime을 곱하여 프레임 당 회전이 아닌, 초 단위 기준으로 계산하여 하드웨어 성능에 따른 속도 차이를 제거해준다.

 

 : MoveActor 또한 동일하게 루트 컴포넌트 및 스태틱 메쉬를 설정해준다.

   StartLocation(시작 위치), MoveSpeed(이동 속도), MaxRange(최대 거리), MoveDirection(이동 방향) 을 선언 및 정의해준다.

   - 핵심 : StartLocation은 X,Y,Z 좌표가 모두 들어가기에 타입을 float가 아닌 FVector 선언을 해준다.

               벡터에는 방향이 필요하기 때문에 MoveDirection 또한 선언해주어야 한다.

좌) MoveActor.h 우) MoveActor.cpp

 

 - BeginPlay()에서 시작 위치와 시작 방향을 저장한다.

 

 - 여기서부턴 강의에서 배우지 않았기 때문에 방법을 따로 찾아보았다.

순서가 중요하기에 정리하였다.

1. 현재 위치 가져오기
2. 현재 설정된 방향으로 이동시키기
3. 시작 지점으로부터 얼마나 멀어졌는지 계산하기
4. 설정한 최대 거리를 넘어가면 방향을 반대로 변경
5. 반복

 

 : 현재 위치를 가져오는 코드는 FVector CurrentLocation = GetActorLocation(); 이다.

   매 프레임 마다 액터의 현재 위치를 CurrentLocation에 넣어준다.

 

   CurrentLocation.X += MoveDirection * MoveSpeed * DeltaTime;

   -> 현재 위치의 X좌표를 방향 * 속도 * 시간을 곱하여 더한다.

 

   SetActorLocation(CurrenLocation); 

   매 프레임 마다 CurrentLocation 값을 현재 액터의 좌표에 입력한다.

 

   float DistanceMoved = FVector::Dist(StartLocation, CurrentLocation);

 : 이동 거리 변수 선언 후 정의한다.

   FVector::Dist() -> 각 좌표의 거리를 계산하는 함수이다.

   따라서, StartLocation과 CurrentLocation 사이의 거리를 매 프레임 마다 게산한다.

 

 : if (DistanceMoved >= MaxRange)

   이동 거리가 최대 거리를 벗어나면 방향을 반대로 뒤집어준다

   매 순간 체크하여 반대편에 도달하였다면, 다시 방향을 반대로 뒤집어 루프하게 된다.

 

 - 리플렉션을 적용하여 에디터 내부에서 변수값을 변경할 수 있게 한다.

 : UPROPERTY() 를 사용하여 접근 범위를 상세하게 설정한다.

MoveActor.cpp

EditAnywhere : 클래스 기본값, 인스턴스 모드에서 수정 가능
BlueprintReadWrite : Blueprint 그래프에서 Getter/Setter값을 읽거나 쓸 수 있다.

에디터 내부에서 카테고리에 잘 정리된 모습

 

: 에디터 내부에서 디폴트 값을 변경 할 수 있게 되었다.

 

녹화 영상

https://youtu.be/cDbLZapekuk

 

 

 - 이 과제를 하며 새롭게 배운 것

 MoveDirection(이동 방향)
: 이동을 하려면 당연히 방향을 설정해주어야 한다.
강의에서 배우지 않았다고 생각 자체를 하지 못한 것이 속상했다.

CurrentLocation.X += MoveDirection * MoveSpeed * DeltaTime;
 : 현재 위치의 X좌표를 방향 * 속도 * 시간을 곱하여 더한다.
X의 값을 Y 혹은 Z로 바꾸어준다면, 상하좌우 이동 방향을 바꿀 수 있다.

FVector::Dist(StartLocation, CurrentLocation)
 : 각 좌표의 거리를 계산하는 함수이다.
Dist는 Distance(거리)의 약자임을 알고 나니 확실하게 이해가 되었다.