- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在虚幻引擎中,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)。
接受 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/
我已经创建了一个从 UActorComponent 派生的类,我想使它的一些方法成为 BlueprintCallable。但是,将其添加到 UFUNCTION 宏会导致构建错误。类头如下所示: #in
在虚幻引擎中,UFUNCTION用于通过附加说明符来丰富功能,以用于蓝图使用、复制和委托(delegate)。 然而,一些委托(delegate)类型似乎不允许绑定(bind) UFUNCTION(如
我是一名优秀的程序员,十分优秀!