Roi*_*ton 3 delegates unreal-engine4
在 UnrealEngine 中,UFUNCTION用于通过蓝图使用、复制和委托的附加说明符来丰富功能。
但是,某些委托类型似乎不允许绑定 a UFUNCTION(如多播委托),而其他类型则需要绑定 a UFUNCTION(如动态多播委托)。
是否有可用的概述,哪种委托类型接受哪种类型的函数(普通 c++ 或UFUNCTION)?
只有动态 委托需要可以绑定为 a 的函数UFUNCTION。
+-----------------------------------------------+----------------------+--------------------+
| Type | binds c++ function | binds `UFUNCTION` |
+-----------------------------------------------+----------------------+--------------------+
| Singlecast | yes | yes |
| Multicast | yes | no |
| Event | yes | ? |
| Dynamic singlecast | no | yes |
| Dynamic multicast | no | yes |
| `FTimerDelegate` (singlecast) | yes | yes |
| `FTimerDynamicDelegate` (dynamic singlecast) | no | yes |
+-----------------------------------------------+----------------------+--------------------+
Run Code Online (Sandbox Code Playgroud)
(这是我目前的观察。如有错误,请评论或编辑或添加答案。)
UFUNCTION 增加编译时间和工件大小,因此仅在调用代码需要时才使用宏。
动态委托支持序列化,具有在蓝图图中工作的额外代码(在 BP 中称为事件/事件调度器),并且比其他委托类型慢。如果您只需要 C++ 的委托,则大多数时候您不需要动态委托。
接受 C++ 函数绑定的委托,可以用模板包装
template<typename T>
struct MyTemplateWrapper
{
DECLARE_MULTICAST_DELEGATE_OneParam(FMyDelegateWithTemplate, T);
};
Run Code Online (Sandbox Code Playgroud)
像MyTemplateWrapper<float>::FMyDelegateWithTemplate MyCallback;.
请记住:UPROPERTY宏不受支持,MyCallback因为MyTemplateWrapper它不能是USTRUCT/ UCLASS(因为它们不支持模板)。但是,由于非动态委托类型仍然不支持蓝图,因此缺少UPROPERTY并没有损失。
UFUNCTION虚幻答案的简短摘要。