专栏首页逍遥剑客的游戏开发UE4学习笔记: Functions

UE4学习笔记: Functions

函数声明

UE4中有两种函数, 一种是传统的C++函数, 一种是UFunction. UFunction通过加入一些描述符来支持一些特殊功能

UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)])
ReturnType FunctionName([Parameter, Parameter, ...])

主要有几种应用:

  1. 在Blueprint中调用
  2. 做为delegate, 如与按键消息进行绑定
  3. 网络回调和数据同步
  4. 做为命令行的指令执行, 同UE3的exec关键字

函数说明符

  • Blueprint相关
    • BlueprintAuthorithOnly: 没有网格授权的话不会在blueprint中执行
    • BlueprintCallable: 可以在blueprint中执行
    • BlueprintCosmetic: 表现函数, 不会在服务器执行
    • BlueprintImplementableEvent: 可以在blueprint中重写
    • BlueprintNativeEvent: 设计为被blueprint重写, 但是仍然包含native的实现
    • BlueprintPure: 不会影响自身对象
  • Network相关
    • Client: 只在客户端执行
    • Server: 只在服务端执行
    • NetMulticast: 会在服务器和所有客户端执行
    • Reliable: 函数执行通过网络进行复制, 并且是可靠的
    • Unreliable: 函数在复制执行时可能失败
  • Editor相关
    • Category
  • 其它
    • CustomThunk: 提供自定义的execFoo, 而不是生成的
    • Exec: 可以在命令行中被执行

元数据说明符

  • BlueprintInternalUseOnly
  • BlueprintProtected: 只在blueprint中调用
  • DeprecatedFunction
  • DeprecationMessage
  • UnsafeDuringActorConstruction

函数参数说明符

  • Out: 传引用
  • Optional: 可选, 取默认值

委托(Delegate)

DECLARE_DELEGATE_OneParam( FStringDelegate, FString );
FSharedRef< FLogWriter > LogWriter( new FLogWriter() );

WriteToLogDelegate.BindSP( LogWriter, &FLogWriter::WriteToLog );
WriteToLogDelegate.Execute( TEXT( "Delegates are spiffy!" ) );

建议Delegate传递时使用引用, 避免传值引起内存分配

multi-cast与event的区别只有声明event的类本身可以调用event的Broadcast, IsBound, Clear函数

dynamic delegate是用函数名进行绑定, 所以可以进行序列化, 但速度相对较慢

定时器(Timer)

GetWorldTimerManager().SetTimer(this, &AMatineeActor::CheckPriorityRefresh, 1.0f, true);
GetWorldTimerManager().ClearTimer(this, &AMatineeActor::CheckPriorityRefresh);
GetWorldTimerManager().IsTimerActive(this, &APlayerController::DelayedPrepareMapChange)

Timer不是线程安全的, 只能在游戏线程使用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Ogitor代码分析

    逍遥剑客
  • 玻璃效果

    逍遥剑客
  • 从Native到Web(三), NaCl学习笔记: 3D渲染(DX9迁移到GLES)

    逍遥剑客
  • 小程序云开发--云函数操作数据表函数整合

    Kindear
  • 一个MySQL主从切换不成功故障引发的思考

    腾讯数据库技术
  • memcached源码阅读----使用libevent和多线程模型

    本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。

    ctree
  • 文本数字拆分技巧(第二弹!)

    上期刚刚分享了简单的通过智能填充和Len与LenB函数实现的文本数字拆分! 感兴趣可以点我先看上一期的! 本期难度较上期略有提高,和您分享新的技巧。 ? 没...

    用户1332619
  • python pyqt5 ui生成py 常用

    D:\soft\Miniconda3\Scripts\pyuic5.exe -o testde.py D:\file\python\siflask\test.u...

    用户5760343
  • 手机号归属地

    今天意外之间发现的很好用的查询手机归属地的代码,在此分享一下 由于要初始化CURL会话,所以php.ini中要打开extension=php_curl.dll扩...

    joshua317
  • 版本12——Wolfram语言和Mathematica的一次飞跃

    (本文译自Stephen Wolfram于英文12.0版发布日2019年4月16日的博客。版本12不仅囊括了拿破仑定理,还有Wolfram公理以及欧几里得所著《...

    WolframChina

扫码关注云+社区

领取腾讯云代金券