目录
四、UFUNCTION()/float TextureReaderSampleFunction(float Param)
引言:
在编写了我们需要用到的枚举类和结构体后,我们就可以正式的去定义和实现我们所想要实现的插件功能了,在声明头文件编写函数体之前,我们首先需要详细的了解一下UE提供给我们的类一些宏定义以及其父类。
UCLASS()
class UTextureReaderBPLibrary : public UBlueprintFunctionLibrary
{
GENERATED_UCLASS_BODY()
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Execute Sample function", Keywords = "TextureReader sample test testing"), Category = "TextureReaderTesting")
static float TextureReaderSampleFunction(float Param);
};
一、UCLASS()
UCLASS()
在 Unreal Engine(虚幻引擎)中扮演着至关重要的角色,它是用于定义一个类的宏,特别是那些可以作为蓝图(Blueprint)类的类。以下是 UCLASS()
在虚幻引擎中的具体作用:
1.1定义蓝图类
UCLASS()
宏允许开发者在 C++ 中定义一个类,并使这个类能够在虚幻引擎的编辑器中被编辑,以及在蓝图中被实例化和使用。这对于游戏开发来说非常重要,因为它提供了一种将 C++ 功能暴露给蓝图系统的方式,从而允许非程序员通过可视化编程来利用这些功能。
1.2反射系统支持
虚幻引擎使用自己的反射系统来动态地处理和操作 C++ 类、结构体、函数、成员变量和枚举的信息。UCLASS()
宏是反射系统的一部分,它允许引擎在运行时识别和处理被标记的类。这使得引擎能够执行诸如序列化、垃圾回收、网络复制以及蓝图与 C++ 之间的通信等高级功能。
1.3元数据与类行为控制
UCLASS()
宏还支持元数据(meta)参数,这些参数提供了关于类的额外信息,并允许开发者控制类在引擎和编辑器中的行为。例如,开发者可以使用元数据来指定类的显示名称、描述、分类、是否可作为蓝图基类等。这些设置有助于在编辑器中更好地组织和搜索类,以及提高蓝图系统的可用性和易用性。
1.4抽象类与实例化控制
通过使用 abstract
关键字作为 UCLASS()
宏的一个参数,开发者可以将类声明为抽象基类。这可以防止用户在虚幻编辑器中直接实例化这个类的对象,或者将其作为蓝图类的基类。这对于那些本身没有实例化意义的类(如仅用于提供静态函数或接口的类)来说非常有用。
1.5类分组与组织
UCLASS()
宏还支持 ClassGroup
参数,允许开发者将类分组到特定的类别中。这有助于在编辑器中更好地组织和浏览类,特别是在处理大量类时。
1.6蓝图类型与放置性控制
通过 BlueprintType
和 NotPlaceable
等参数,开发者可以控制类是否可以作为蓝图类、是否可以在编辑器中放置到场景中。这些设置有助于确保类的使用符合开发者的预期,并防止在编辑器中出现不期望的行为。
1.7自动化生成代码
UCLASS()
宏通常与 GENERATED_BODY()
宏一起使用。GENERATED_BODY()
宏负责在编译时自动生成与类相关的引擎代码,这包括反射系统所需的代码。这使得开发者无需手动编写这些繁琐的代码,从而提高了开发效率和代码质量。
综上所述,UCLASS()
在虚幻引擎中是一个非常重要的宏,它提供了定义蓝图类、支持反射系统、控制类行为、组织类、控制蓝图类型和放置性等方面的功能。这些功能对于游戏开发来说至关重要,因为它们为开发者提供了一种灵活而强大的方式来扩展和自定义虚幻引擎的功能。
二、GENERATED_UCLASS_BODY()
在Unreal Engine (UE) 中,GENERATED_UCLASS_BODY()
是一个宏,用于在C++类中生成与Unreal Engine的反射系统相关的代码。这个宏通常出现在由Unreal Engine的类系统(UClass系统)管理的类的定义中。这些类通常继承自UObject
或其子类,并用于存储游戏数据、逻辑、组件等。
2.1作用
- 反射系统支持:
GENERATED_UCLASS_BODY()
宏为类提供了反射系统的支持,这使得Unreal Engine能够在运行时动态地查询类的信息(如属性、函数、事件等)。- 反射系统对于编辑器的功能(如属性编辑器、蓝图可视化脚本等)至关重要,因为它允许编辑器动态地与类进行交互。
- 序列化:
- 通过反射系统,Unreal Engine能够知道哪些类的成员需要序列化(即保存到磁盘或从磁盘加载)。这对于保存游戏状态、加载资源等非常重要。
- 垃圾回收:
- Unreal Engine使用自己的垃圾回收机制来管理
UObject
对象的生命周期。GENERATED_UCLASS_BODY()
宏帮助引擎跟踪这些对象的引用关系,从而正确地回收不再使用的对象。
- Unreal Engine使用自己的垃圾回收机制来管理
- 蓝图支持:
- 如果类被标记为可在蓝图中使用(通过
UCLASS()
宏的Blueprintable
或BlueprintType
等属性),则GENERATED_UCLASS_BODY()
宏确保该类可以在Unreal Engine的蓝图可视化脚本编辑器中被正确地识别和使用。
- 如果类被标记为可在蓝图中使用(通过
- 元数据:
- 类定义中的元数据(如
UPROPERTY()
宏中指定的属性)通过GENERATED_UCLASS_BODY()
宏被处理,并用于生成相应的反射数据。
- 类定义中的元数据(如
2.1使用
GENERATED_UCLASS_BODY()
宏应该紧跟在类的声明之后,并且在类的实现文件(.cpp)中。- 在类的声明中(通常是在头文件.h中),你会看到
UCLASS()
宏,它用于指定类的元数据和属性。 - 类的实现文件(.cpp)中的
GENERATED_UCLASS_BODY()
宏是必需的,因为它实际上生成了与反射系统相关的代码。
三、UBlueprintFunctionLibrary
UBlueprintFunctionLibrary
是 Unreal Engine(虚幻引擎)中的一个重要基类,它允许开发者创建可以从蓝图(Blueprint)系统中调用的静态函数库。以下是对 UBlueprintFunctionLibrary
的详细解释:
3.1定义与用途
UBlueprintFunctionLibrary
是 Unreal Engine 中的一个特殊基类,用于定义那些可以在蓝图脚本中调用的静态函数。这些函数通常用于提供游戏逻辑、数据处理或其他通用功能,以便非程序员能够通过蓝图系统轻松地使用它们。
3.2特点与功能
- 静态函数:
UBlueprintFunctionLibrary
中的函数必须是静态的,这意味着它们不需要类的实例就可以被调用。- 静态函数在内存中只有一份副本,因此它们在性能上通常比实例函数更高效。
- 蓝图可调用:
- 通过使用
UFUNCTION(BlueprintCallable)
宏,开发者可以将UBlueprintFunctionLibrary
中的静态函数标记为可从蓝图系统中调用。 - 这使得非程序员能够通过蓝图脚本访问和使用这些函数,从而扩展游戏的功能和交互性。
- 通过使用
- 元数据:
UFUNCTION
宏还支持元数据(meta)参数,用于提供关于函数的额外信息。- 这些信息包括函数的显示名称(DisplayName)、关键词(Keywords)和分类(Category)等,有助于在蓝图编辑器中更好地组织和搜索函数。
- 代码复用:
UBlueprintFunctionLibrary
允许开发者将常用的功能封装成静态函数,并在多个蓝图脚本中重复使用。- 这不仅提高了代码的可读性和可维护性,还促进了代码复用和模块化设计。
而我们的UTextureReaderBPLibrary继承了它以后,也就具有了以上的特性。
四、UFUNCTION()/float TextureReaderSampleFunction(float Param)
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Execute Sample function", Keywords = "TextureReader sample test testing"), Category = "TextureReaderTesting")
在Unreal Engine (UE) 中,UFUNCTION
宏用于声明一个Unreal Engine C++类中的函数,并指定其一些特殊属性,这些属性决定了该函数如何在Unreal Engine的反射系统、蓝图(Blueprints)编辑器或其他系统中表现。
-
BlueprintCallable
:这个属性表明该函数可以在蓝图编辑器中被调用。这允许非程序员通过蓝图系统来使用C++中定义的函数。 -
meta = (...)
:这个部分用于提供关于函数的额外信息,通常用于在编辑器中改善用户体验或提供文档化信息。DisplayName = "Execute Sample function"
:这定义了函数在蓝图编辑器中显示的名称,而不是其实际的C++名称。这有助于提供更友好或更具描述性的名称。Keywords = "TextureReader sample test testing"
:这些关键词用于帮助用户在蓝图编辑器中搜索或找到这个函数。它们可以帮助提高函数的可发现性。Category = "TextureReaderTesting"
:这定义了函数在蓝图编辑器中的分类。当用户在蓝图编辑器中浏览可调用的函数时,这些函数会按照其类别进行分组,这有助于组织和查找函数。
float UTextureReaderBPLibrary::TextureReaderSampleFunction(float Param)
{
return -1;
}
static float TextureReaderSampleFunction(float Param);
这个函数声明是一个编译器自动给我们创建的自定义的静态函数,旨在从Param中读取或采样数据,并返回一个浮点数,具体逻辑需要我们自己实现。自动生成的.c文件默认返回-1;