매개변수로 델리게이트 전달하기

김지윤·2025년 5월 16일
0

UE5

목록 보기
12/16

매개변수로 델리게이트를 전달하면 좋겠다~ 싶을 때가 있다.

나만의 General Button 클래스를 만들어 사용하는 경우, 델리게이트에 함수를 바인드하기 위해선 위 사진처럼 위젯 내부의 UButton을 꺼내와서 OnClicked 델리게이트에 바인드해야 한다.
이걸 반복하게 되면 노드 정리도 까다롭고 Button에서 Button이 나오는 상태라 좀 꼴불견이다.
그래서 델리게이트를 매개변수로 전달, General Button이 알아서 바인드하도록 하면 노드를 1개라도 줄일 수 있는데..

문제는 델리게이트를 input 매개변수로 추가할 수 없다는 점이다.
하지만 아래와 같은 방법을 사용한다면 추가할 수 있다.
이게 언리얼이 의도한 바는 아닌 것 같지만(의도했다면 애초에 저기서 추가할 수 있어야 하니까) 어쨌든 바인드 자체는 잘 된다.

  1. 함수 선언
  2. 내부 구현 진입
  3. Event Dispatcher 아무거나 선언
  4. Bind 노드 생성
  5. 델리게이트 핀 드래그해서 함수 시작 노드에 박기

이는 당연히 UButton의 OnClicked 등의 델리게이트도 가능하며, 결과적으로 General Button을 갖고 있는 클래스에선 Button을 꺼내오는 노드 하나를 줄일 수 있었다.

출력 노드에도 꽂을 수 있다.

주의할 점은, 당연하게도 함수의 매개변수와 델리게이트의 매개변수를 일치시켜야만 핀을 연결할 수 있다.
근데 그것이 왜 주의할 점이냐 하면, 눈으로 보기엔 델리게이트 핀이 어떤 매개변수를 요구하는지 알 수 없기 때문이다.

이벤트 디스패쳐에 Input 매개변수를 하나 선언하면

사진처럼 자료형이 Delegate (by ref)로 일치함에도 핀이 연결되지 않는 걸 알 수 있다.
매개변수가 일치하지 않기 때문이다.
매개변수를 가진 델리게이트를 input 매개변수로 사용하기 위해선, 델리게이트의 input 매개변수를 미리 선언한 뒤 핀을 꽂아주면 된다.

단어가 반복되니 알아듣기 어렵다. 사진으로 보여주겠다.

매개변수가 없는 델리게이트 선언 후 핀에 꽂은 상황

매개변수가 없는 함수를 선언, 핀에 꽂을 수 있다.

함수에 매개변수가 생기자 연결할 수 없게 됐다.

NewFunction과 Bind NewEventDispatcher의 핀이 연결된 채로 NewEventDispatcher에 Input 매개변수를 추가하자 크래쉬가 발생한 모습

확실하게 핀을 끊어준 뒤

NewEventDispatcher에 Inpus 매개변수 추가

이 상태로 다시 꽂는 건 상관 없다.

연결할 수 없었던 핀이 다시 연결할 수 있게 된 모습이다.
이제 블루프린트에서도 델리게이트를 매개변수로 전달할 수 있다.

profile
공부한 거 시간 날 때 작성하는 곳

0개의 댓글