反射和宏

C++本身没有反射机制,是通过”MyObject.generated.h”这个头文件实现反射机制,在每一个类声明前使用宏,就可以实现与蓝图的通信,垃圾回收等功能。

步骤

1、创建一个Uobjectimage.png
2、创建后自动打开VS,我们在头文件中把类创建完整,并给上宏实现,代码如下。
头文件:

  1. // Fill out your copyright notice in the Description page of Project Settings.
  2. #pragma once
  3. #include "CoreMinimal.h"
  4. #include "UObject/NoExportTypes.h"
  5. #include "MyObject.generated.h"
  6. /**
  7. *
  8. */
  9. UCLASS(Blueprintable)
  10. class TESTCPP_API UMyObject : public UObject
  11. {
  12. GENERATED_BODY()
  13. public:
  14. UMyObject();
  15. UPROPERTY(BlueprintReadWrite)
  16. float value = 15;
  17. UFUNCTION(BlueprintCallable)
  18. void myfunction();
  19. };

实现文件:

  1. // Fill out your copyright notice in the Description page of Project Settings.
  2. #include "MyObject.h"
  3. UMyObject::UMyObject() {
  4. }
  5. void UMyObject::myfunction()
  6. {
  7. GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Yellow, FString::Printf(TEXT("value = %d"), value));
  8. }

3、右键创建蓝图派生类,打开蓝图编辑器,测试我们写好的类,注意勾选显示继承变量,如图。
image.png