gpt4 book ai didi

delegates - 何时为委托(delegate)使用 UFUNCTION

转载 作者:行者123 更新时间:2023-12-04 02:54:58 27 4
gpt4 key购买 nike

在虚幻引擎中,UFUNCTION用于通过附加说明符来丰富功能,以用于蓝图使用、复制和委托(delegate)。

然而,一些委托(delegate)类型似乎不允许绑定(bind) UFUNCTION(如多播委托(delegate)),而其他类型需要绑定(bind) UFUNCTION(如动态多播委托(delegate))。

是否有可用的概述,哪种委托(delegate)类型接受哪种类型的函数(普通 c++ 或 UFUNCTION)?

最佳答案

仅限 dynamic delegates要求可以绑定(bind)为 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 |
+-----------------------------------------------+----------------------+--------------------+

(这是我目前的观察。如有错误,请评论或编辑或添加答案。)

性能

UFUNCTION增加编译时间和工件大小,因此仅在调用代码需要时使用宏。

动态委托(delegate)支持序列化,具有用于在蓝图图中工作的额外代码(在 BP 中称为事件/事件调度程序),并且比其他委托(delegate)类型慢。如果您只需要 C++ 的委托(delegate),则大多数时候不需要动态委托(delegate)。

对非动态委托(delegate)的 C++ 模板支持

接受 c++ 函数绑定(bind)的委托(delegate),可以用模板包装

template<typename T>
struct MyTemplateWrapper
{
DECLARE_MULTICAST_DELEGATE_OneParam(FMyDelegateWithTemplate, T);
};

MyTemplateWrapper<float>::FMyDelegateWithTemplate MyCallback; 一样使用它.

请记住:UPROPERTY MyCallback 不支持宏自从 MyTemplateWrapper不能是 USTRUCT/UCLASS (因为他们不支持模板)。但是,由于 动态委托(delegate)类型仍然不支持蓝图,因此缺少的 UPROPERTY不是损失。

离题:UFUNCTION 的其他用法

unreal answers 上的简短摘要.

关于delegates - 何时为委托(delegate)使用 UFUNCTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53417144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com