블루프린트를 C++로 옮기는 작업을 하고 있는데 FKismetSystemLibrary라는 곳에서 Delay를 사용할 수 있었다. 하지만 이건 실제로 코드 진행을 멈추는게 아니라 콜백을 하는 정도이다.
오늘 선임께서 하사하신 꿀팁은 타이머랑 람다를 섞어 쓰는 방법이다. 이미 알고 있는 사람도 있었겠지만 난 처음봐서 신기해 올려본다.
FTimerHandle WaitHandle;
float WaitTime; //시간을 설정하고
GetWorld()->GetTimerManager().SetTimer(WaitHandle, FTimerDelegate::CreateLambda([&]()
{
// 여기에 코드를 치면 된다.
}), WaitTime, false); //반복도 여기서 추가 변수를 선언해 설정가능
#include “TimerManager.h”
하지 않으면 에러 없이 에디터 크래시.
수정
코드 부분 안에 해당 문장 추가.
GetWorld()->GetTimerManager().ClearTimer(WaitHandle);
Executing State 이후에 내부에서 Clean 해주기 때문에 차라리 EndPlay 정도에서 체크해 주는게 맞을 것 같습니다. Loop 중이라면 조건에 맞게 ClearTimer 해주는게 맞을 것 같구요!
언리얼5 사용중인데, 결국 문제 해결 못하고 람다 없이 함수로 사용했습니다.
답변 감사합니다 🙂
UI 버튼을 누르면 Actor를 Lerp로 이동하는 코드를 짰는데,
디버그를 계속 진행해서 캡쳐를 복사로 하고 지역변수를 전역변수로 옮기니 글에 써주신 방법으로 성공했습니다.
한달째 이랬다 저랬다 해서 죄송합니다… 이전 댓글들을 지우고 싶네요…