2026.01.12

박민재 (Daype)·2026년 1월 12일

6-1 도전과제 구현 : FTimerHandle 사용

FTimerHandle 언리얼 엔진 자체 내부에 구현된 클래스로 원하는 타이머를 만들어서 동작할 수 있다. 해당 클래스를 사용하면 매 프레임마다 호출하는 Tick 함수를 사용하는것보다 좀더 명확하게 필요한 타이밍에 지정된 만큼 함수의 동작을 호출할 수 있다.

FTimerHandle 은 GetWorldTimeManager().SetTimer() 를 통해 호출 할 수 있는데

이런식으로 정의를 찾아가게되면 delegate 를 사용하는형식 function을 사용하는 형식 등 여러가지 사용법을 제시한다. 일단 공통적인부분을 살펴보면

FTimerHandle 은 멤버변수로 등록한 타이머를 전달하면되고,
InRate 는 지속시간
InbLoop 는 반복여부
InFirstDelay 는 최초시작시 딜레이를 뜻한다 기본값은 -1.f 다.

delegate를 사용하고 미사용하고의 차이는 사용할 클래스를 지정하는 것에 있는데 delegate를 사용하지않을경우 함수만 전달하면 어떤클래스의 함수인지 컴파일러가 알지못한다 때문에 함수가 속해있는 객체포인터를 전달하게 되는것이지만, delegate를 사용할 경우 그럴 필요가 없다. 그 이유는 delegate 자체가 함수를 변수처럼 사용하기위해 대리자 역할을 하는것이다 즉, 그렇게하려면 delegate 는 함수의 출처를 알고있어야한다 누구의 어떤 함수인지 때문에 delegate 를 인자로 사용하게 될경우, 이미 출처를 가지고있기 때문에 따로 인자로 전달을 할 필요가 없는것이다. 그렇다면 delegate 를 사용하기위해 멤버변수로 선언을 해주고 선언된 delegate에 함수를 전달해주면 되는데 주로 사용하는 방법으론 객체의 함수를 직접 전달하거나 람다표현식으로 사용하는 경우가 있다.

람다표현식을 공부하기위해 람다표현식을 사용하여 구현해본다.

람다표현식
주로 함수의 이름, 재사용이 필요없는경우 사용하며, 코드를 간결하게하는데에 도움이되는 식이다.

람다식은 []() {;}; 이런 형태로 이루어져있는데 [] 이 부분은 람다 캡처로 외부변수를 어떤 방식으로 쓸지 정하는것이다 예를들어 [&] 라면 모든 외부변수를 참조해서 쓰겠다는 의미이고
[=] 라면 모든 외부변수를 복사해서 람다식내부에서 사용하겠다는 의미이다 당연히 특정변수에대해서 지정할 수도 있다 외부에 int a 라는 변수가있을때 [&a] 라면 a만 참조해서 내부에서 사용하겠다는 의미이다.

람다식에 사용법에대해 간단히 알아보았고 람다식을이용해서 일정시간 후 파괴되는 엑터랑 일정시간이 지나면 순간이동을 하는 엑터를 만들 것이다.


우선 내부 멤버변수로 FTimerHandle 과 인자로 사용할 Delegate를 선언해준다.


이후 생성자에서 람다식을 구현하는데 DestroyDelegate 내부 람다식에 경우 Destroy() 함수는 기본적으로 인자를 전달하지않으면 자기자신을 인자로 전달하는데 람다식 내부에서는 자기자신이 존재하지않음으로 외부캡처에 &연산자를 삽입해 자기자신을 참조 할 수 있도록 했다.

밑에 SetPositionDelegate 의 람다식의 경우
멤버변수로 선언한 TpRandomLocation 을 사용하기위해 &를 사용한 모습이다. 이후 해당 람다식이 호출될때마다 랜덤한 범위에 값을 x,y에 대입하고 해당위치로 엑터를 옮긴뒤 옮겨진위치를 다시 시작지점으로 바꿔준다.

현재 방향을 전환하는 함수의 로직이 움직인 거리에서 시작지점을 빼는 두점사이의 거리 공식을 사용하고 있기때문에 시작지점을 수정하지 않은채로 순간이동을 하게되면 옮겨진위치가 현재위치이고 시작위치에서 계산을 하게되기 때문에 Dist 계산같은경우 movedistance 보다 큰 위치로 옮겨지게될경우 오류가 생기고 Z축계산의 경우 -1.0f 가 곱해진 하강중 옮겨지게되면 -판정이 사라져 계속 하강하게 된다. 때문에 시작위치도 같이 수정해주어야한다.

구현확인결과 문제없이 작동하는것을 확인했다.

2번도전과제 : 동적스폰

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/spawning-actors-in-unreal-engine
언리얼엔진 공식 SpawnActor

SpawnActor : 언리얼에서 제공하는 메서드로 Actor객체를 스폰할때 사용한다

우선 스폰을 담당하는 엑터 ActorSpawner을 따로 만들어준다. 만들고나서 확인해보니 헤더파일을 참조할 수 없는 오류가 뜬다 해당 오류를 더블클릭해 들어가보니 파일들이 모여있는 경로로 들어갔는데 SpawnerActor.h 파일이 있는곳으로 가졌다 수상해서 파일 찾기로 ActorSpawner 를 검색해보니 내가 직접 생성한 파일들이 모여있는곳 에도 존재하고 이상한곳에도 존재한다 나의 추측상 이미 엔진내부에 존재하는 ActorSpawner.h 과 이름이 같아서 생기는 오류 같았다 이후 내가만들었던 ActorSpawner.h을 삭제하고 다시 리빌딩을 해보니 정상적으로 고쳐졌다. 코딩의 절반은 네이밍이다 라는 말이 다시 떠오르는 상황이었다.

0개의 댓글