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..

[UE4]创建对象的的几种姿势(C++)的更多相关文章

  1. 快速了解IOC的几种姿势

    一.首先我们了解IOC如何注入的几种姿势 构造函数注入(Constructor Injection) Ioc容器会智能的选择和调用合适的构造函数以创建依赖的对象.如果被选择的构造函数具有相应的参数,I ...

  2. 两个文件去重的N种姿势

    最近利用shell帮公司优化挖掘关键词的流程,用shell替代了多个环节的操作,极大提高了工作效率. shell在文本处理上确有极大优势,比如多文本合并.去重等,但是最近遇到了一个难搞的问题,即两个大 ...

  3. 又拍云张聪:OpenResty 动态流控的几种姿势

    2019 年 1 月 12 日,由又拍云.OpenResty 中国社区主办的 OpenResty × Open Talk 全国巡回沙龙·深圳站圆满结束,又拍云首席架构师张聪在活动上做了< Ope ...

  4. 补习系列(7)-springboot 实现拦截的五种姿势

    目录 简介 姿势一.使用 Filter 接口 1. 注册 FilterRegistrationBean 2. @WebFilter 注解 姿势二.HanlderInterceptor 姿势三.@Exc ...

  5. python打开文件的N种姿势

    # python打开文件的N种姿势 print('[1]使用open()函数+简单for循环') f1 = open('python.txt') for line in f1: print(line. ...

  6. [转]地图投影的N种姿势

    此处直接给出原文链接: 1.地图投影的N种姿势 2.GIS理论(墨卡托投影.地理坐标系.地面分辨率.地图比例尺.Bing Maps Tile System)

  7. 【bzoj3224】Tyvj 1728 普通平衡树 01Trie姿势+平衡树的四种姿势 :splay,旋转Treap,非旋转Treap,替罪羊树

    直接上代码 正所谓 人傻自带大常数 平衡树的几种姿势:  AVL Red&Black_Tree 码量爆炸,不常用:SBT 出于各种原因,不常用. 常用: Treap 旋转 基于旋转操作和随机数 ...

  8. SpringBoot系列教程web篇Servlet 注册的四种姿势

    原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势 前面介绍了 java web 三要素中 filter 的使用指南与常见的易错事项,接下来我们来看一下 Serv ...

  9. python HelloWorld 的 4 种姿势,你知道几种

    安装完 Python 之后该干啥,当然是要 say HelloWorld 了. python.exe 就是个普通程序 和其它所有命令一样,在命令行中敲下 python 并回车的时候,操作系统去 PAT ...

随机推荐

  1. $(function(){})与(function($){})(jquery)

    $(function(){}) function中的代码在DOM加载完成后立即执行,比window.onload()更快,因为前者不需要等待图片加载完成. (function($){})(jquery ...

  2. JS禁止用F5键

    //禁止用F5键 function document.onkeydown() { if ( event.keyCode==116) { event.keyCode = 0; event.cancelB ...

  3. tiny4412 UART for C printf Demo

    /************************************************************************** * tiny4412 UART for C pr ...

  4. OK335xS UART device registe hacking

    /************************************************************************* * OK335xS UART device reg ...

  5. windows7所有版本迅雷地址下载集合(含32位和64位) - imsoft.cnblogs

    Windows7 SP1旗舰版 32位官方原版下载: ed2k://|file|/cn_windows_7_ultimate_with_sp1_x86_dvd_618763.iso|265187737 ...

  6. 内网渗透中SSh的巧用

    后续应该会做个实例 转自:http://www.myhack58.com/Article/html/3/8/2009/25156.htm 经常遇到如下情形,内部网络主机通过路由器或者安全设备做了访问控 ...

  7. page 分页

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  8. Finally什么时候会被执行

    PS:有return意味着程序结束,他一定会在程序结束前执行: PS:    return返回前 会把数据存储到指定的位置,基本类型是不会改变的.引用类型是会影响修改的值的

  9. leetcode -day28 Unique Binary Search Trees I II

    1.  Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search t ...

  10. TensorFlow笔记-04-神经网络的实现过程,前向传播

    TensorFlow笔记-04-神经网络的实现过程,前向传播 基于TensorFlow的NN:用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型 张量(tenso ...