Unreal Cookbook:创建对象的的几种姿势(C++)

DEMO源代码

这个DEMO演示了在C++代码中,创建UE4的常见类型的对象,包括Actor,ActorComponent,加载资源等。

源代码请从这里下载:https://github.com/neil3d/UnrealCookBook

使用的引擎版本为:4.11.2

打开项目后,启动“CreateObjectDemo/CreateObjectDemoMap.umap”地图文件即可运行。

 

创建组件

在UE4中,为Actor创建组件,可以使用UObject::CreateDefaultSubobject()模板函数,这个函数只能在构造函数中调用。如下所示:

/* <CreateObjectDemo>
	* 创建Component对象,要使用CreateDefaultSubobject模板函数
	*/
	MyComponent = CreateDefaultSubobject<UMyActorComponent>(TEXT("MyComponent"));

 

加载资源对象

在UE4中,项目中的所有资源文件,不要看做是文件,而要理解为“静态对象”:也就是对象序列化的产物。加载项目资源可以使用“UObject::StaticLoadObject()”函数,其中重要的参数为对象的Name,而不是文件路径。UE底层提供文件读取功能,无论资源文件是存储我独立的.uasset文件,还是存储到.PAK文件中,对于上层都不需要关心。

/* <CreateObjectDemo>
	* 加载模型、贴图等对象,使用StaticLoadObject函数
	*/
	UStaticMesh* SM_Vase = Cast<UStaticMesh>(StaticLoadObject(UStaticMesh::StaticClass(),
		NULL,
		TEXT("/Game/Assets/StaticMeshes/SM_Vase"))
		);

	StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
	StaticMeshComponent->SetStaticMesh(SM_Vase);

 

创建Actor对象

创建Actor对象,需要使用UWorld::SpawnActor()接口,如下所示:

/* <CreateObjectDemo>
	 * 创建AActor派生类对象不要用NewObject或者new,而要用UWorld::SpawnActor()
	*/
	UWorld* World = GetWorld();
	FVector pos(150, 0, 20);

	AMyActor* MyActor = World->SpawnActor<AMyActor>(pos, FRotator::ZeroRotator);

 

创建UObject对象

如果你有UObject的派生类(非Actor、非ActorComponent),那你可以使用NewObject()模板函数来创建其实例对象。

	/* <CreateObjectDemo>
	 * 使用NewObject模板函数,来创建UObject派生类对象
	*/
	MyObject = NewObject<UMyObject>();


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值