导航菜单
首页 >  金融学专业可以报考会计学岗位吗  > UE4 C++反射从入门到原理剖解(UE4 4.26)

UE4 C++反射从入门到原理剖解(UE4 4.26)

UE4 C++反射具体应用案例

测试反射类ATestActor

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "TestActor.generated.h"UCLASS(Blueprintable, meta = (DisplayName = "TestActor_Name", classGroup = "ssss"))class TESTREFLECT_API ATestActor : public AActor{GENERATED_BODY()public:// Sets default values for this actor's propertiesATestActor();UPROPERTY(EditAnywhere, Category = "MyAAA")float a;protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;UPROPERTY()int32 b;UFUNCTION(BlueprintCallable, Category = "Snowing|BlueprintFunc")void TestFunc();public:// Called every framevirtual void Tick(float DeltaTime) override;};

下面提供了UE4 C++反射的几种常用用法

//获取对应基类的对象TArray result;GetObjectsOfClass(UClass::StaticClass(), result);TArray result1;GetObjectsOfClass(UEnum::StaticClass(), result1);TArray result2;GetObjectsOfClass(UScriptStruct::StaticClass(), result2);//遍历一个类的属性以及属性的元数据UClass* TestActorClass = ATestActor::StaticClass();for (TFieldIterator P(TestActorClass); P; ++P){FProperty* prt = *P;const TMap* metaData = prt->GetMetaDataMap();}//遍历一个类的函数for (TFieldIterator F(TestActorClass); F; ++F){UFunction* fun = *F;}//UClass 元数据FString test = TestActorClass->GetMetaData("classGroup");//Object的额外元数据 仅在编辑器的时候有用UMetaData* metaData = this->GetOutermost()->GetMetaData();metaData->SetValue(this, FName("Test"), TEXT("TestActor"));TMap* keyValues = metaData->GetMapForObject(this);if (keyValues != nullptr&&keyValues->Num() > 0){for (const auto& i : *keyValues){FName key = i.Key;FString value = i.Value;}} UE4 C++反射的实现原理剖解 CPP反射总体流程

 说明一下UE4 CPP反射宏(UClass, UPROPERTY, UFUNCTION)是空宏,最后根本没有参与到C++编译当中,具体见ObjectMacros.h

UBT

UBT全称UnrealBuildTool, 用在建立项目配置,如模块依赖,包含文件目录,设置项目优化配置项等,作用类似于premake, cmake这些东西,就我看到的代码而言,UE4 C++ 反射和UBT几乎没什么关系。UnrealBuildTool.exe文件Engine\Source\Programs\UnrealBuildTool\Development

UHT

UHT 全称UnrealHeaderTool, UE4 C++反射依赖于 UHT这个工具。UHT用在创建新文件xxx.generated.h 和 xxx.gen.cpp , 其中generated.h 主要是相关函数的

相关推荐: