UE4 C++ 动态生成蓝图类(基于Actor)实例

UE4 C++ 编程

这是有关我在使用UE4引擎进行C++变成过程中所遇到的一些难题和解决方案的记录,如果有不对的地方,希望不要被我误导,应该查询更加专业的讲解,也欢迎指正。

一、构造函数中生成

暂时未使用到,合适的时候会进行补充。

二、非构造函数中生成

在非构造函数中去生成一个基于蓝图类的实例是有一些区别的。
1.先决条件
创建一个基于Actor的C++类"AMyActor";在编译器中基于创建的"AMyActor"或者引擎自带的C++类生成所需要的蓝图类"BP_MyActor"。
2.资源路径
选中新创建的"BP_MyActor"蓝图类,“Ctrl+C"复制资源路径,得到类似"Blueprint’/Game/BP_MyActor.BP_MyActor’“的路径,但是需要在结尾加上”_C”,构建成"Blueprint’/Game/BP_MyActor.BP_MyActor_C’"这样的资源路径进行使用。
3.动态生成
我们需要使用蓝图类的基类作为我们生成的蓝图实例的接收器,具体看代码解释。

// An highlighted block
if (GetWorld())
{
	// 使用基类获取到蓝图类的资源
	UClass* BlueprintVar = StaticLoadClass(AMyActor::StaticClass(), nullptr, TEXT("Blueprint'/Game/BP_MyActor.BP_MyActor_C'"));
	if (BlueprintVar != nullptr)
	{  
		// 向场景中添加新生成的蓝图实例
		AMyActor* pMyActor = GetWorld()->SpawnActor<AMyActor>(BlueprintVar);
		if (pMyActor)
		{
			// 这样,场景中就会动态生成一个蓝图类实例
			// 我们也会得到一个蓝图类基类的实例指针,并可以调用基类"AMyActor"中的函数
		}
	}
}
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的UE4 C++生成Actor的例子,假设你已经创建了一个新的C++项目: 1. 创建一个新的C++,继承自AActor。例如,我们创建一个名为MyActor: ```cpp UCLASS() class MYPROJECT_API AMyActor : public AActor { GENERATED_BODY() public: AMyActor(); virtual void BeginPlay() override; virtual void Tick(float DeltaTime) override; }; ``` 2. 在MyActor.cpp文件中实现构造函数和BeginPlay函数: ```cpp AMyActor::AMyActor() { // 设置Actor的根组件 RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent")); // 创建一个静态网格组件 UStaticMeshComponent* MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent")); MeshComponent->SetupAttachment(RootComponent); // 加载静态网格 constructorHelpers::FObjectFinder<UStaticMesh> Mesh(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube")); if (Mesh.Succeeded()) { MeshComponent->SetStaticMesh(Mesh.Object); } } void AMyActor::BeginPlay() { Super::BeginPlay(); // 在控制台输出Actor的位置 UE_LOG(LogTemp, Warning, TEXT("MyActor is at %s"), *GetActorLocation().ToString()); } ``` 3. 在MyActor.cpp文件中实现Tick函数,使Actor在每帧旋转: ```cpp void AMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); // 每帧旋转Actor FRotator Rotation = GetActorRotation(); Rotation.Yaw += DeltaTime * 100.f; SetActorRotation(Rotation); } ``` 4. 在MyActor.h文件中添加头文件和构造函数声明: ```cpp #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "Engine/StaticMesh.h" #include "Components/StaticMeshComponent.h" #include "MyActor.generated.h" UCLASS() class MYPROJECT_API AMyActor : public AActor { GENERATED_BODY() public: AMyActor(); virtual void BeginPlay() override; virtual void Tick(float DeltaTime) override; private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true")) UStaticMeshComponent* MeshComponent; }; ``` 5. 在你的场景中添加一个MyActor,例如在GameMode的BeginPlay函数中: ```cpp void AMyProjectGameModeBase::BeginPlay() { Super::BeginPlay(); // 创建一个新的MyActor AMyActor* MyActor = GetWorld()->SpawnActor<AMyActor>(AMyActor::StaticClass(), FVector(0.f, 0.f, 0.f), FRotator(0.f, 0.f, 0.f)); } ``` 6. 运行游戏,你应该可以看到一个旋转的立方体Actor。 希望这个例子能够帮助你理解如何使用UE4 C++生成Actor

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值