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 );
BlueprintPure 蓝图纯函数(必须要有返回值)
- 没有执行引脚
- 必须要有返回值
UFUNCTION(BlueprintPure, Category = "methods")
float FunBlueprintPure1();
UFUNCTION(BlueprintPure, Category = "methods")
void FunBlueprintPure2(float& Value);
BlueprintImplementableEvent 蓝图可实现事件
- 无需再C++写实现函数,需要在蓝图override
- 有返回值和无返回值 有所区别
UFUNCTION(BlueprintImplementableEvent, Category = "methods")
void FunBlueprintImplementableEvent1();
UFUNCTION(BlueprintImplementableEvent, Category = "methods")
void FunBlueprintImplementableEvent2(float& Value);
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);
}
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));
}
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++ 基础知识】<;11>;资源的同步加载与异步加载
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder Constructor ...
-
【UE4 C++ 基础知识】<;1>; UPROPERTY宏、属性说明符、元数据说明符
属性声明 属性使用标准的C++变量语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符. UPROPERTY([specifier, specifier, ...], [meta(key= ...
-
【UE4 C++ 基础知识】<;12>; 多线程——FRunnable
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的 ...
-
【UE4 C++ 基础知识】<;3>; 基本数据类型、字符串处理及转换
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...
-
【UE4 C++ 基础知识】<;9>; Interface 接口
概述 简单的说,接口提供一组公共的方法,不同的对象中继承这些方法后可以有不同的具体实现. 任何使用接口的类都必须实现这些接口. 实现解耦 解决多继承的问题 蓝图使用 使用方法 三种调用方法的区别 调用 ...
-
【UE4 C++ 基础知识】<;8>; Delegate 委托
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...
-
【UE4 C++ 基础知识】<;13>; 多线程——TaskGraph
概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线 ...
-
【UE4 C++ 基础知识】<;14>; 多线程——AsyncTask
概念 AsyncTask AsyncTask 系统是一套基于线程池的异步任务处理系统.每创建一个AsyncTas,都会被加入到线程池中进行执行 AsyncTask 泛指 FAsyncTask 和 FA ...
-
C++基础知识(2)---函数
c++中的函数和C语言中的函数相比,增加了许多新的语法与功能.在这里总结一下c++中常用的引用函数,函数重载和内联函数. 1 引用参数 引用参数最常用的一个例子就是 交换 两个数,如下 void s ...
随机推荐
-
从Eclipse 到Unity(Android)
Eclipse 与Unity之间的交互有以下两种方式: 1.在Eclispe中编写好针对Andorid平台的功能,然后将其制作成库(Library)文件(jar)应用到Unity中; 其中Androi ...
-
TextView支持的XML属性及相关方法
1.android:auyoLink----->setAutoLinkMask(int) ----->是否将符合指定格式的文字转换为可单击的超链接形式 2.android:autoText ...
-
Java工程图标前面的红色叹号
有时Java工程图标前面会出现一个红色的叹号,这是因为工程引入的jar包不存在(或者被删除.移动)造成的. 右键点击工程,选择Build Path->Configure Build Path,弹 ...
-
Hive安装(三)之奇怪的错误
启动hive命令报错 “Metastore contains multiple versions” 解决方案: 因为hive metastore存储在mysql中,所以登录mysql,use hive ...
-
WIN7下USB多点触摸,一次发多个数据包的延迟问题,重要!
这个问题很常见, 花了差不多一个星期时间来解决.硬件相关的东西太多坑了,而且这些坑不像代码那样可见. 使用混合模式,每次最多报告2个点.如果是5点则需要上报三次. 问题就来了,atmel的CTP最 ...
-
cf B. Hungry Sequence
http://codeforces.com/contest/327/problem/B 这道题素数打表就行. #include <cstdio> #include <cstring& ...
-
jQuery.access源码分析
基本理解 jQuery.attr是jQuery.attr,jQuery.prop,jQuery.css提供底层支持,jQuery里一个比较有特色的地方就是函数的重载, 比如attr,有如下几种重载 $ ...
-
【BBED】BBED模拟并修复ORA-08102错误
[BBED]BBED模拟并修复ORA-08102错误 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其 ...
-
Percona XtraBackup的部分备份与恢复/单库备份/单表备份/指定库备份/指定表备份
本文是翻译的Percona XtraBackup 2.2版的官方文档,原文地址在此:https://www.percona.com/doc/percona-xtrabackup/2.2/innobac ...
-
[十]JavaIO之FilterInputStream FilterOutputStream
FilterInputStream FilterOutputStream都是装饰器模式中的Decorator抽象装饰角色 他们继承了各自的抽象构建InputStream 和OutputStream ...