博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UE4]创建对象的的几种姿势(C++)
阅读量:4578 次
发布时间:2019-06-08

本文共 1815 字,大约阅读时间需要 6 分钟。

DEMO源代码

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

源代码请从这里下载:https://code.csdn.net/neil3d/unrealcookbook

使用的引擎版本为:4.11.2

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

 

创建组件

在UE4中,为Actor创建组件,可使用UObject::CreateDefaultSubobject()模板函数,以下所示:
/* 
* 创建Component对象,要使用CreateDefaultSubobject模板函数 */ MyComponent = CreateDefaultSubobject
(TEXT("MyComponent"));

加载资源对象

在UE4中,项目中的所有资源文件,不要看作是文件,而要理解为“静态对象”:也就是对象序列化的产物。加载项目资源可使用“UObject::StaticLoadObject()”函数,其中重要的参数为对象的Name,而不是文件路径。UE底层提供文件读取功能,不管资源文件是存储我独立的.uasset文件,还是存储到.PAK文件中,对上层都不需要关心。
/* 
* 加载模型、贴图等对象,使用StaticLoadObject函数 */ UStaticMesh* SM_Vase = Cast
(StaticLoadObject(UStaticMesh::StaticClass(), NULL, TEXT("/Game/Assets/StaticMeshes/SM_Vase")) ); StaticMeshComponent = CreateDefaultSubobject
(TEXT("StaticMeshComponent")); StaticMeshComponent->SetStaticMesh(SM_Vase);

创建Actor对象

创建Actor对象,需要使用UWorld::SpawnActor()接口,以下所示:
/* 
* 创建AActor派生类对象不要用NewObject或new,而要用UWorld::SpawnActor() */ UWorld* World = GetWorld(); FVector pos(150, 0, 20); AMyActor* MyActor = World->SpawnActor
(pos, FRotator::ZeroRotator);

创建UObject对象

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

 

1.CreateDefaultSubobject必须写在Actor的无参构造函数中,否则crash; 

2.CreateDefaultSubobject中的TEXT或者FName参数在同一个Actor中不能重复,否则crash;

UE4不推荐try catch,并且默认是不支持的,UE4推荐Assertions。 

 

int i=1+3;verify(i==2);

上面是verify的简单用法,运行后会直接crash,就是这么高冷。听说还可以用

UE_LOG(Fatal, ...);

来打断执行。 

使用actorObject->IsA,不为actorObject带上UPROPERTY()也会crash..

 

转载于:https://www.cnblogs.com/timy/p/8645447.html

你可能感兴趣的文章
sqlite3性能优化要点
查看>>
颜色分类函数
查看>>
Oracle数据泵详解
查看>>
(中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
查看>>
sort-归并排序
查看>>
django 快速实现完整登录系统(cookie)
查看>>
.NET中的out和ref关键字
查看>>
Python之ftp服务器
查看>>
KMP预处理
查看>>
oracle的wm_concat函数实现行转列
查看>>
C语 三子棋小游戏
查看>>
[BZOJ 1861] 书架
查看>>
Unity NGUI 批量点击跳转场景
查看>>
送给毕业生的一个学习建议
查看>>
基于redis+lua实现高并发场景下的秒杀限流解决方案
查看>>
Oracle 块修改跟踪 (Block Change Tracking) 说明
查看>>
阿里云 Redis 服务遇到的问题
查看>>
Jwt Token 安全策略使用 ECDSA 椭圆曲线加密算法签名/验证
查看>>
Window2008通过web.config进行限制ip访问
查看>>
浅析门户网站体育赛事CDN加速解决方案
查看>>