🚩 DYNAMIC MULTI 델리게이트
Line Trace를 사용해보면서 다이나믹 멀티캐스트 델리게이트를 사용해보자.
Dynamic Multi 델리게이트를 사용하기 위해 FLinearTraceResult 라는 델리게이트를 생성하고, 델리게이트에 등록시킬 함수 StartLaunch까지 생성하였다.
다이나믹 델리게이트는 파라미터 개수와 파라미터명까지 전부 똑같아야 하기 때문에 매개변수를 복사하여 함수를 생성했다.
Begin Play 시 만들어둔 델리게이트에 AddDynamic 함수로 StartLaunch 함수를 등록해주었다.
🚩 Line Trace
Tick 함수가 호출될 때 계속해서 Line Trace를 실행시켰다.
플레이어 단 하나만 추적할것이기 때문에 Single인 LineTraceSingleByProfile 함수를 사용하였다.
(Profile은 다루기 편하게 하기 위해 존재하기 실제로는 없음, Channel을 호출하여 사용한다)
Line Trace의 매개변수는 이전 게시글에서 정리해둔 Sphere Trace와 대부분 동일하고, 다른점은 Line이 그려질 첫번째 start 위치와, 끝날 end 위치를 전달하고, 체크할 Profile인 "Pawn"을 전달해준다는 점이다.
LineTrace를 Tick에서 호출하기 때문에 DrawDebugTrace를 ForOneFrame으로 설정해도 계속해서 Line이 그려질 것이다.
이후, 그려진 Line Trace에 충돌되는 객체가 있다면 다이나믹 멀티캐스트 델리게이트에 등록된 함수를 Broadcast 로 호출하였다.
다이나믹 델리게이트의 특징 중 하나인 블루프린트에서 사용할 수 있다는 점을 이용하여 BlueprintAssignable 속성을 갖는 변수를 선언하여 직렬화하였다.
이후 해당 변수를 선언했던 Line Trace 클래스(C++) 기반의 블루프린트를 생성한 뒤, 이벤트 그래프에서 OnLineTraceResult 이벤트 바인딩을 사용할 수 있다.
즉, 다이나믹 델리게이트는 이벤트 디스패처와 같은 역할을 수행한다.
결과적으로 프로그램을 실행시키면, Line Trace로 그려지는 Line이 출력되고
해당 Line에 충돌 시 C++ 클래스에서 등록해놓은 Launch 함수가 실행되어 플레이어가 위로 뜨고, 블루프린트에서 등록한 Change Color 함수가 실행되어 캐릭터 색상이 변경된다.