DEMO源代码

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

源代码请从这里下载:https://code.csdn.net/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(, , );
AMyActor* MyActor = World->SpawnActor<AMyActor>(pos, FRotator::ZeroRotator);

创建UObject对象

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

1.CreateDefaultSubobject必须写在Actor的无参构造函数中,否则crash; 
2.CreateDefaultSubobject中的TEXT或者FName参数在同一个Actor中不能重复,否则crash;

UE4不推荐try catch,并且默认是不支持的,UE4推荐Assertions。 
https://answers.unrealengine.com/questions/264921/cannot-use-try-with-exceptions-disabled.html 
https://docs.unrealengine.com/latest/INT/Programming/Assertions/index.html

int i=+;
verify(i==);

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

UE_LOG(Fatal, ...);

来打断执行。 
https://community.gamedev.tv/t/try-catch-not-preventing-crashing/8481/6

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

最新文章

  1. Bloom Filter:海量数据的HashSet
  2. 数据库基础及T-SQL语句
  3. c语言 动态数组
  4. 概念学习(Concept Learning)
  5. [terry笔记]Oracle会话追踪(一):SQL_TRACE&amp;EVENT 10046
  6. Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation(贪心)
  7. SqlServer 查询表、表说明、关联表、字段说明,语句汇总
  8. Android Loader使用,屏幕解锁,重复荷载
  9. Spring还使用基于 JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释
  10. c#把汉字转化成全拼音函数(全拼)
  11. easyUI combobox 添加空白项
  12. Django 2.x 常用命令
  13. 第87讲:scala中使用For表达式做查询
  14. PHP多进程系列笔记(三)
  15. arcgis10.1安装出现1606错误怎么办?找不到盘符
  16. empty与isset,null与undefined
  17. Redis 可视化工具 Redis Desktop Manager 和 treeNMS 的使用
  18. 2019.1.3 Mac安装免费版StarUml3.0.2 &amp;&amp;&amp;Xmind思维导图 &amp;&amp;Google浏览器***版
  19. 浅谈android代码保护技术_ 加固
  20. IDEA中配置svn

热门文章

  1. spring集成redis——主从配置以及哨兵监控
  2. Redis学习第二课:Redis String类型及操作
  3. SWIFT显示底部的工具条
  4. UML-(团队作业)
  5. 算法训练 Lift and Throw
  6. 有道词典 安卓版 更新日志 - imsoft.cnblogs
  7. CTF密码学之摩斯密码
  8. CTF之LSB信息隐藏术
  9. git的使用方法学习
  10. MySQL Disk--NAND Flash原理