UE4使用UCLASS宏包裹原生C++ENUM
时间: 2024-09-14 17:04:05 浏览: 59
在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++类的蓝图Widget
在Unreal Engine 4(UE4)中,你可以通过以下步骤实现派生自C++类的蓝图Widget:
1. **创建C++类**:
- 首先,你需要创建一个继承自`UUserWidget`的C++类。例如,假设我们创建一个名为`MyCustomWidget`的类。
```cpp
// MyCustomWidget.h
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyCustomWidget.generated.h"
UCLASS()
class YOURPROJECT_API UMyCustomWidget : public UUserWidget
{
GENERATED_BODY()
public:
// Add your custom functions and variables here
};
```
2. **编译项目**:
- 确保你的项目已经成功编译,这样UE4才能识别到新的C++类。
3. **创建蓝图Widget**:
- 打开UE4编辑器,右键点击内容浏览器中的空白区域,选择“用户界面” -> “Widget Blueprint”。
- 在弹出的对话框中,选择刚才创建的C++类`MyCustomWidget`作为父类。
- 命名并保存这个蓝图Widget,比如命名为`BP_MyCustomWidget`。
4. **编辑蓝图Widget**:
- 双击新创建的蓝图Widget以打开它。
- 你可以在蓝图编辑器中添加UI元素、设置属性和绑定事件等。
5. **使用蓝图Widget**:
- 现在你可以在其他蓝图或代码中使用这个自定义的蓝图Widget了。例如,你可以在另一个Widget中通过拖放的方式将`BP_MyCustomWidget`添加到设计视图中,或者在代码中动态创建它。
### 示例代码
假设你在C++类中添加了一个自定义函数:
```cpp
// MyCustomWidget.h
UFUNCTION(BlueprintCallable, Category = "Custom")
void CustomFunction();
```
在蓝图中调用这个函数:
- 打开`BP_MyCustomWidget`的蓝图编辑器。
- 在事件图表中,你可以找到并调用`CustomFunction`。
### 相关问题
1. **如何为C++类添加自定义属性?**
2. **如何在蓝图中访问C++类的自定义属性?**
3. **如何在蓝图中处理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项目的灵活性和扩展性。
阅读全文