【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

时间:2022-09-05 19:12:31

UFunction声明

  • UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数。UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文件中函数声明上方的行中。宏将支持 函数说明符 更改UE4解译和使用函数的方式。

  • 可利用函数说明符将UFunction对蓝图可视化脚本图表公开,以便开发者从蓝图资源调用或扩展UFunction,而无需更改C++代码。在类的默认属性中,UFunction可绑定到委托,从而能够执行一些操作(例如将操作与用户输入相关联)。它们还可以充当网络回调,这意味着当某个变量受网络更新影响时,用户可以将其用于接收通知并运行自定义代码。用户甚至可创建自己的控制台命令(通常也称 debug、configuration 或 cheat code 命令),并能在开发版本中从游戏控制台调用这些命令,或将拥有自定义功能的按钮添加到关卡编辑器中的游戏对象。

UFUNCTION([specifier1=setting1, specifier2, ...], [meta(key1="value1", key2, ...)])
ReturnType FunctionName([Parameter1, Parameter2, ..., ParameterN1=DefaultValueN1, ParameterN2=DefaultValueN2]) [const];

函数说明符

常见说明符

BlueprintCallable ``蓝图可调用

  • 可设置返回值
  • 可通过参数形式,返回多个参数
UFUNCTION(BlueprintCallable, Category="methods")
void FunBlueprintCallable1(); UFUNCTION(BlueprintCallable, Category = "methods")
bool FunBlueprintCallable2(FString Path,float input1, const float& input2, float& output, TArray<int32> Points1, const TArray<int32>& Points2, TArray<FVector>& Position );

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

BlueprintPure 蓝图纯函数(必须要有返回值)

  • 没有执行引脚
  • 必须要有返回值
UFUNCTION(BlueprintPure, Category = "methods")
float FunBlueprintPure1(); UFUNCTION(BlueprintPure, Category = "methods")
void FunBlueprintPure2(float& Value);

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

BlueprintImplementableEvent 蓝图可实现事件

  • 无需再C++写实现函数,需要在蓝图override
  • 有返回值和无返回值 有所区别
UFUNCTION(BlueprintImplementableEvent, Category = "methods")
void FunBlueprintImplementableEvent1(); UFUNCTION(BlueprintImplementableEvent, Category = "methods")
void FunBlueprintImplementableEvent2(float& Value);

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

BlueprintNativeEvent 蓝图原生事件

  • C++中定义事件,C++和蓝图中都可以实现(C++必须实现)。
  • 如果蓝图不实现,会执行C++的函数实现
  • 如果蓝图和C++都实现,蓝图则会覆盖C++实现,只执行蓝图实现.
  • C++函数实现,需要额外定义一个名为:函数名+_Implementation的返回值和参数列表都一致的函数.
  • BlueprintNativeEvent需要配合BlueprintCallable一起使用,否则蓝图中不可调用
  • 有返回值和无返回值 表现形式有所区别
//DisplayName 蓝图中实际调用的函数名
//DeprecationMessage显示警告信息
//此处参数用Fsting str 编译不通过
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "methods", meta=(DisplayName="FunBlueprintNativeEvent测试",DeprecatedFunction, DeprecationMessage = "This FunBlueprintNativeEvent 的测试."))
void FunBlueprintNativeEvent(const FString& str="From C++");
void AMyActor::FunBlueprintNativeEvent_Implementation(const FString& str)
{
GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Blue, str);
}

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

Exec 控制台可调用函数

此函数可从游戏中的控制台中执行。Exec命令仅在特定类中声明时才产生作用。包括:

  • Pawns,
  • Player Controllers,
  • Player Input,
  • Cheat Managers,
  • Game Modes,
  • Game Instances,
  • overriden Game Engine classes,
  • Huds
UFUNCTION(Exec, Category = "methods")
void FunExec(float Value);
void AMyPawn::FunExec(float Value)
{
GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Blue, FString::Printf(TEXT("BPNative C++ Call Value:%f"), Value));
}

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符


meta说明符

ExpandEnumAsExecs

h文件

UENUM(BlueprintType)
enum class BranchOutput : uint8
{
Branch0,
Branch1,
Branch2,
}; UFUNCTION(BlueprintCallable, Category = "methods", Meta = (ExpandEnumAsExecs = "Branches"))
void FunExpandEnumAsExecs(int32 Input, BranchOutput& Branches);

cpp文件

void AMyActor::FunExpandEnumAsExecs(int32 Input, BranchOutput& Branches)
{
if (Input == 0)
{
Branches = BranchOutput::Branch0;
}
else if(Input == 1)
{
Branches = BranchOutput::Branch1;
}
else
{
Branches = BranchOutput::Branch2;
}
}

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符

参考

【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符的更多相关文章

  1. 【UE4 C&plus;&plus; 基础知识】&lt&semi;11&gt&semi;资源的同步加载与异步加载

    同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...

  2. 【UE4 C&plus;&plus; 基础知识】&lt&semi;1&gt&semi; UPROPERTY宏、属性说明符、元数据说明符

    属性声明 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符. UPROPERTY([specifier, specifier, ...], [meta(key= ...

  3. 【UE4 C&plus;&plus; 基础知识】&lt&semi;12&gt&semi; 多线程——FRunnable

    概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...

  4. 【UE4 C&plus;&plus; 基础知识】&lt&semi;3&gt&semi; 基本数据类型、字符串处理及转换

    基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...

  5. 【UE4 C&plus;&plus; 基础知识】&lt&semi;9&gt&semi; Interface 接口

    概述 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法后可以有不同的具体实现. 任何使用接口的类都必须实现这些接口. 实现解耦 解决多继承的问题 蓝图使用 使用方法 三种调用方法的区别 调用 ...

  6. 【UE4 C&plus;&plus; 基础知识】&lt&semi;8&gt&semi; Delegate 委托

    概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...

  7. 【UE4 C&plus;&plus; 基础知识】&lt&semi;13&gt&semi; 多线程——TaskGraph

    概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线 ...

  8. 【UE4 C&plus;&plus; 基础知识】&lt&semi;14&gt&semi; 多线程——AsyncTask

    概念 AsyncTask AsyncTask 系统是一套基于线程池的异步任务处理系统.每创建一个AsyncTas,都会被加入到线程池中进行执行 AsyncTask 泛指 FAsyncTask 和 FA ...

  9. C&plus;&plus;基础知识(2)---函数

    c++中的函数和C语言中的函数相比,增加了许多新的语法与功能.在这里总结一下c++中常用的引用函数,函数重载和内联函数. 1  引用参数 引用参数最常用的一个例子就是 交换 两个数,如下 void s ...

随机推荐

  1. 从Eclipse 到Unity&lpar;Android&rpar;

    Eclipse 与Unity之间的交互有以下两种方式: 1.在Eclispe中编写好针对Andorid平台的功能,然后将其制作成库(Library)文件(jar)应用到Unity中; 其中Androi ...

  2. TextView支持的XML属性及相关方法

    1.android:auyoLink----->setAutoLinkMask(int) ----->是否将符合指定格式的文字转换为可单击的超链接形式 2.android:autoText ...

  3. Java工程图标前面的红色叹号

    有时Java工程图标前面会出现一个红色的叹号,这是因为工程引入的jar包不存在(或者被删除.移动)造成的. 右键点击工程,选择Build Path->Configure Build Path,弹 ...

  4. Hive安装(三)之奇怪的错误

    启动hive命令报错 “Metastore contains multiple versions” 解决方案: 因为hive metastore存储在mysql中,所以登录mysql,use hive ...

  5. WIN7下USB多点触摸,一次发多个数据包的延迟问题,重要!

    这个问题很常见, 花了差不多一个星期时间来解决.硬件相关的东西太多坑了,而且这些坑不像代码那样可见.   使用混合模式,每次最多报告2个点.如果是5点则需要上报三次. 问题就来了,atmel的CTP最 ...

  6. cf B&period; Hungry Sequence

    http://codeforces.com/contest/327/problem/B 这道题素数打表就行. #include <cstdio> #include <cstring& ...

  7. jQuery&period;access源码分析

    基本理解 jQuery.attr是jQuery.attr,jQuery.prop,jQuery.css提供底层支持,jQuery里一个比较有特色的地方就是函数的重载, 比如attr,有如下几种重载 $ ...

  8. 【BBED】BBED模拟并修复ORA-08102错误

    [BBED]BBED模拟并修复ORA-08102错误 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...

  9. Percona XtraBackup的部分备份与恢复&sol;单库备份&sol;单表备份&sol;指定库备份&sol;指定表备份

    本文是翻译的Percona XtraBackup 2.2版的官方文档,原文地址在此:https://www.percona.com/doc/percona-xtrabackup/2.2/innobac ...

  10. &lbrack;十&rsqb;JavaIO之FilterInputStream FilterOutputStream

    FilterInputStream  FilterOutputStream都是装饰器模式中的Decorator抽象装饰角色 他们继承了各自的抽象构建InputStream 和OutputStream ...