UE4使用UCLASS宏包裹原生C++ENUM
时间: 2024-09-14 09:04:05 浏览: 12
在Unreal Engine 4 (UE4)中,UCLASS宏通常用于声明C++中的类作为Unreal的UObject系统的一部分。而UObjects是UE4中的一种特殊类,拥有反射(Reflection)和其他高级特性,比如序列化、垃圾回收(Garbage Collection)和编辑器支持等。
对于C++枚举类型(enum),UE4没有直接使用UCLASS宏去包装,因为枚举通常不需要这些高级特性。但是,UE4提供了一种特殊的宏UENUM,用来创建可以被引擎反射系统识别的枚举类型。使用UENUM宏声明的枚举类型,可以享受到和UCLASS相同的一些特性,例如能够在编辑器中被序列化和编辑。
当你使用UENUM宏声明枚举时,你还可以指定枚举在编辑器中的显示方式和其他属性,比如它是否可以被复制粘贴等。
示例代码可能如下:
```cpp
UENUM(BlueprintType)
enum class MyEnum : uint8
{
Value1,
Value2,
Value3
};
```
在这个示例中,`BlueprintType`关键字是可选的,它表示这个枚举可以在蓝图(Blueprints)中使用。如果不添加`BlueprintType`,则这个枚举只能在C++代码中使用,不能在蓝图编辑器中使用。
相关问题
ue4蓝图调用c++全局函数
在UE4中,可以通过蓝图调用C++全局函数。首先,需要在C++代码中声明并实现全局函数。具体的步骤如下:
1. 打开UE4的项目代码文件夹,并找到对应的.h头文件和.cpp源文件。
2. 在.h头文件中声明全局函数。例如,可以在声明文件的末尾添加如下代码:
```
#pragma once
#include "CoreMinimal.h"
UCLASS()
class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "MyFunctions")
static void MyGlobalFunction();
};
```
3. 在.cpp源文件中实现全局函数。例如,可以在源文件的末尾添加如下代码:
```
#include "MyBlueprintFunctionLibrary.h"
void UMyBlueprintFunctionLibrary::MyGlobalFunction()
{
// 在此处实现全局函数的逻辑
// 例如,可以在这里添加打印语句
UE_LOG(LogTemp, Warning, TEXT("调用了全局函数!"));
}
```
4. 保存并编译C++代码,确保函数成功添加到UE4项目中。
接下来,在蓝图中调用该全局函数的步骤如下:
1. 打开UE4的蓝图编辑器。
2. 在蓝图中选择要调用全局函数的节点。
3. 在蓝图编辑器右侧的详情面板中,找到“蓝图调用”节点。
4. 从“蓝图调用”节点的输出引脚拖出连接线,并将其链接到“执行入口”节点。
5. 在连接线上右键点击并选择“Convert to Previous C++ Function Call”(转换为C++函数调用)。
6. 在“函数调用”节点的类下拉菜单中选择“UMyBlueprintFunctionLibrary”。
7. 在函数下拉菜单中选择要调用的全局函数,例如“MyGlobalFunction”。
8. 保存蓝图并点击运行即可调用全局函数。
通过以上步骤,就可以在UE4中使用蓝图调用C++全局函数了。调用全局函数可以方便地实现一些复杂的逻辑和功能,提高UE4项目的灵活性和扩展性。
UE4 C++调用动态库
在UE4中调用动态库,需要进行以下几个步骤:
1. 编写动态库的头文件和源文件,并进行编译生成动态库文件(.dll或.so文件)。
2. 在UE4项目中创建新的C++类或打开现有的C++类,并添加对动态库头文件的包含语句。
3. 在C++类中声明动态库函数的函数声明(函数名、参数类型和返回类型),并在其中使用动态库函数。
4. 将动态库文件(.dll或.so文件)复制到UE4项目的插件或游戏模块的Binaries/Win64目录中。
5. 在UE4项目的构建设置中添加对动态库文件的引用。在UE4项目的.build.cs文件中添加以下代码:
```
PublicAdditionalLibraries.Add("MyDynamicLibrary.lib");
```
其中"MyDynamicLibrary.lib"是您的动态库文件的名称。
6. 在UE4项目中使用动态库函数时,需要使用动态库的导出函数名(也称为C++符号)来调用该函数。您可以使用Windows的dumpbin工具或Linux的nm工具来查看动态库的导出函数名。
下面是一个简单的例子,演示如何在UE4项目中调用一个名为"my_function"的动态库函数:
1. 编写动态库的头文件和源文件,并进行编译生成动态库文件:
```
// MyDynamicLibrary.h
#ifdef MYDYNAMICLIBRARY_EXPORTS
#define MYDYNAMICLIBRARY_API __declspec(dllexport)
#else
#define MYDYNAMICLIBRARY_API __declspec(dllimport)
#endif
MYDYNAMICLIBRARY_API int my_function(int a, int b);
// MyDynamicLibrary.cpp
#include "MyDynamicLibrary.h"
MYDYNAMICLIBRARY_API int my_function(int a, int b)
{
return a + b;
}
```
2. 在UE4项目中创建新的C++类或打开现有的C++类,并添加对动态库头文件的包含语句:
```
#include "MyDynamicLibrary.h"
```
3. 在C++类中声明动态库函数的函数声明,并在其中使用动态库函数:
```
// MyClass.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyClass.generated.h"
UCLASS()
class MYPROJECT_API AMyClass : public AActor
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category="MyCategory")
int MyFunction(int a, int b);
};
// MyClass.cpp
#include "MyClass.h"
int MyFunction(int a, int b)
{
return my_function(a, b);
}
```
4. 将动态库文件(.dll或.so文件)复制到UE4项目的插件或游戏模块的Binaries/Win64目录中。
5. 在UE4项目的构建设置中添加对动态库文件的引用。在UE4项目的.build.cs文件中添加以下代码:
```
PublicAdditionalLibraries.Add("MyDynamicLibrary.lib");
```
6. 在UE4项目中使用动态库函数时,需要使用动态库的导出函数名(也称为C++符号)来调用该函数。您可以使用Windows的dumpbin工具或Linux的nm工具来查看动态库的导出函数名。在此例中,导出函数名为"my_function"。
```
// MyClass.cpp
#include "MyClass.h"
int MyFunction(int a, int b)
{
// 调用动态库函数
int result = my_function(a, b);
return result;
}
```
至此,您已经成功在UE4项目中调用动态库函数。