언리얼엔진 UE5

[UE5/매크로] 딜레이 있는 for loop 만들어보기

jenny330 2023. 5. 3. 15:45

언리얼 블루프린트에서 제공하는 for loop에서는 delay를 주면 적용이 되지 않는다. 

하지만 for loop with delay라는 새로운 매크로를 직접 만들어서 라이브러리화를 할 수 있다!

 

매크로(Macro)란?

Blueprint Macro (블루프린트 매크로) 또는 Macro (매크로)는 본질적으로 노드 그래프를 접은 것과 같습니다. 터널 노드로 지정되는 입구와 출구가 있습니다. 각 터널에는 다른 블루프린트와 그래프에서 사용될 때 매크로 노드에 보이는 실행 또는 데이터 핀이 몇 개든 있을 수 있습니다.

 

거의 함수와 유사하다고 보면 될 것 같다. 실행 핀을 만들어줄 수 있다는 점이 큰 차이점이다.

 

 

원하는 블루프린트에 매크로를 하나 추가해서 제목을 ForLoopWithDelay로 지어준다. 

 

 

 

디테일 창에서 이 매크로가 받아올 정보와 리턴할 정보를 결정할 수 있다. 함수와는 다르게 실행 핀까지 일일히 만들어주어야 한다. 

 

 

 

그 후 이렇게 입력과 출력을 세팅해 준다. 

여기서 각각의 정보가 의미하는 건

 

Exec: 이 for문으로의 진입점

First Index: 몇부터

Last Index: 몇까지 

Delay: 몇 초간 딜레이를 줄지 (딜레이는 플로트로 설정했다.)

 

Loop Body: 반복을 진행할 내용

Index: 각 for문 실행 시 활용할 수 있는 각 반복의 인덱스

Completed: for문 실행을 완료하고 나서 이어질 내용

 

Delay를 제외하고는 for문이랑 똑같다. 

 

그 다음에는 로직을 짜 줄건데, for문에다가 딜레이만 붙인 거라 for문의 내용을 똑같이 가져올 수 있다. 

 

 

 

for loop을 검색해서 블루프린트에 만든 다음 이걸 더블클릭하면

 

 

이렇게 원본 매크로가 나온다. 

 

 

 

입력, 출력 노드를 제외하고 복붙해주자. 

 

할당 노드 옆에 Delay를 검색해서 연결해주고 나머지 핀들도 다 적절하게 연결하면 아래와 같은 형태가 될 거다.

 

 

 

이러면 이제 블루프린트에서 for loop with delay를 검색해서 사용할 수 있다!!

 

그런데 하나 의문이 드는데 딜레이가 들어있는 함수나 매크로는 이벤트그래프 밖에서는 사용할 수가 없다. 함수같은 곳에서 이 딜레이가 있는 포문을 사용하려고 하면 아예 호출되지가 않음. 사실 원래 이 매크로도 함수 내에서 딜레이를 주려다가 실패해서 다른 방법을 찾은 거였는데.. 이건 더 찾아봐야 할 것 같다.

다시 생각해보니 이건 당연한 거였던 거 같다... 수많은 함수를 처리하는 과정에서 한 함수에만 묶여있으면 처리 속도가 저하될 수 밖에 없고 구조적으로도 엄청 안 좋은 구조임... https://forums.unrealengine.com/t/is-there-any-way-to-get-a-delay-in-a-function/391023/2 참고

 

참고 자료: 

https://www.youtube.com/watch?v=Vag2lhosFD8&t=19s