Ch05 Delegate
Delegate
설명
this
pointer 를 넣어서 Per-Instance 구현이 가능함
코드
Dynamic
- Non Dynamic
BindUObject
,AddUFunction
로 Bind 시this
의 weak reference 를 유지하므로 GC 로 삭제시 안정성있음AddUFunction
의 경우UFUNCTION
매크로가 붙지 않으면 Bind 해도 호출안됨.AddStatic
,AddRaw
로 Bind 시 weak reference 는 추적되지 않으며 특히 후자는 GC 등의 메모리에 주의해야함.AddRaw
의 경우UCLASS
가 붙은 클래스의 메소드를 쓰면 컴파일에러남.AddUFunction
외에는 Parameter Payload 를 지정할 수 있음.- 속도도 Dynamic 에 비해 더 빠름.
- Dynamic
- blueprint interface 에서 Bind, Unbind 가능함. (Dispatch 라고도 부름)
- Multicast 가 있는지에 따라
AddDynamic
또는BindUFunction
으로 추가가 한정됨. - Params 이 있는 경우 변수명도 지정해야함.
Multicast
- Multicast
BlueprintAssignable
과BlueprintCallable
의 필요조건- Dynamic 이랑 함께 자주 쓰임
- Dynamic 안붙으면
UPROPERTY
에 못넣음 ExcuteIfBound()
처럼 Binding 되었는지 확인할 필요없이Broadcast()
하면 됨.
Event
외부에서 Bind 는 되지만 Broadcast 는 할 수 없는 delegate.
매크로의 첫번째 인자로 OwningType
을 받으며 보통 내부가 되는 클래스가 들어감. 그리고 GENERATE_BODY()
처럼 클래스 내부에서 정의됨.
기타
- Create
-
staticVariableDelegate.BindStatic(&Class::staticFunc); staticVariableDelegate = FMyDelegateType::CreateStatic(&Class::staticFunc);
- 위와 같은데
SetTimer
처럼 Delegate 타입을 필요로 하는 경우Create
사용
-
- Payload
- Delegate 타입에서 지정된 것보다 더 많은 파라미터를 가진 함수에 적용가능.
- 초과한 파라미터에 대해서 최대 4개까지 값을 저장해서 ```Excute`` 시 자동으로 넣어줌.
댓글남기기