UE4 C++ 静态加载类和资源

静态加载类和资源:指在编译时加载,并且只能在构造函数中编写代码
.h

//增加所需组件的头文件
#include "Components/SceneComponent.h"			//场景组件
#include "Components/StaticMeshComponent.h"		//静态网格体组件
#include "Components/BoxComponent.h"			//Box碰撞体组件
#include "Components/AudioComponent.h"			//音频组件
#include "Components/ChildActorComponent.h"		//子Actor组件
#include "Particles/ParticleSystemComponent.h"	//粒子组件

UCLASS()
class 工程名称_API AMyActor : public AActor
{
	//定义组件变量
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class USceneComponent* MyScene;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class UStaticMeshComponent* MyMesh;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class UParticleSystemComponent* MyParticle;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class UBoxComponent* MyBox;
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class UAudioComponent* MyAudio;

	//定义ChildActor组件类型变量
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "MyComponent")
	class UChildActorComponent* MyChildActor;
}

.cpp

AMyActor::AMyActor()	//注意是在这里实现,不是BeginPlay、Tick
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	//初始化组件变量的值
	MyScene = CreateDefaultSubobject<USceneComponent>(TEXT("MyScene"));
	MyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyMesh"));
	MyParticle = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("MyParticle"));
	MyBox = CreateDefaultSubobject<UBoxComponent>(TEXT("MyBox"));
	MyAudio = CreateDefaultSubobject<UAudioComponent>(TEXT("MyAudio"));
	MyChildActor = CreateDefaultSubobject<UChildActorComponent>(TEXT("MyChildActor"));

	//设置父子层级关系
	RootComponent = MyScene;
	MyMesh->SetupAttachment(MyScene);
	MyParticle->SetupAttachment(MyScene);
	MyBox->SetupAttachment(MyScene);
	MyAudio->SetupAttachment(MyBox);
	MyChildActor->SetupAttachment(MyScene);

	//静态加载资源:设置Component中的属性值
	static ConstructorHelpers::FObjectFinder<UStaticMesh>TempMesh(TEXT("/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cone.Shape_Cone'"));	//引用一个StaticMesh资产,并存储到变量“TempStaticMesh”。FObjectFinder:查找Object
	MyMesh->SetStaticMesh(TempMesh.Object);	//调用“SetStaticMesh”的方法,设置MyMesh组件的StaticMesh属性值
	static ConstructorHelpers::FObjectFinder<UParticleSystem>TempParticle(TEXT("/Script/Engine.ParticleSystem'/Game/StarterContent/Particles/P_Fire.P_Fire'"));	
	MyParticle->SetTemplate(TempParticle.Object);
	static ConstructorHelpers::FObjectFinder<USoundWave>TempAudio(TEXT("/Script/Engine.SoundWave'/Game/StarterContent/Audio/Collapse01.Collapse01'"));	
	MyAudio->SetSound(TempAudio.Object);
	//静态加载资类:设置ChildActor组件中的ChildActorClass属性值
	static ConstructorHelpers::FClassFinder<AActor>TempActor(TEXT("/Script/Engine.Blueprint'/Game/StarterContent/Blueprints/Blueprint_CeilingLight.Blueprint_CeilingLight_C'"));	//注意这里是FClassFinder:查找Class。注意被引用的Actor要加后缀”_C“
    MyChildActor->SetChildActorClass(TempActor.Class);	//注意这里是TempActor.Class
}

在这里插入图片描述

相关推荐

  1. UE5 动态资源

    2024-02-03 09:12:01       24 阅读
  2. C#】Xasset资源模块

    2024-02-03 09:12:01       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-03 09:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-03 09:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-03 09:12:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-03 09:12:01       20 阅读

热门阅读

  1. 8-Docker网路模式之自定义网络

    2024-02-03 09:12:01       35 阅读
  2. curl之网络接口

    2024-02-03 09:12:01       35 阅读
  3. Spring MVC 框架无法找到合适的消息转换器

    2024-02-03 09:12:01       27 阅读
  4. CSS 选择器与相关规则详解

    2024-02-03 09:12:01       34 阅读
  5. JeecgBoot 3.6.1 vue页面定时刷新列表

    2024-02-03 09:12:01       35 阅读
  6. golang 中间件使用

    2024-02-03 09:12:01       35 阅读