文档地址:https://docs.unrealengine.com/zh-CN/Programming/Introduction/index.html

文档详细介绍了C++编程的基础,一些宏和常用变量,做下总结

(一)文档一开始介绍了Actor继承类编程的一些相关知识,以及一些有关UPROPERTY和UFUNCTION相关的简单介绍,之后简单介绍了蓝图。

(二)之后就是深入介绍

主要的类是四种,UObject,AActor,UActorComponnnet,UStruct。

(1)UObject是最基本的构建块,结合UClass可以提供反射、序列化、垃圾回收、联网。每个UObject都会创建一个UClass。我的理解是,UClass对UObject的梳理进行管理,并且提供序列化和联网等功能。

(2)AActor是非常重要的一种类型,可以直接放在舞台上的所有对象都是从其扩展而来,AActor继承自UObject,同时AActor有一些特殊的函数,BeginPlay()在对象首次存在是调用,Tick()每帧调用一次,EndPlay()在对象离开Gameplay空间时调用。

UWorld::SpawnActor()。成功产生Actor后,会调用它的 BeginPlay() 方法,下一帧调用 Tick()

使用时使用GetWorld()->SpawnActor<T>(),使用这个函数偶尔会出现编辑器崩溃,以后需要关注类似问题。

(3)UActorComponent

(4)UStruct,不会被垃圾回收

(三)虚幻反射系统

GamePlay类利用特殊标记实现反射功能,反射功能可以实现动态功能,例如GC、序列化、网络复制和BP/C++通信。简要标记概述:

UCLASS():为结构体生成反射数据,结构体必须派生自UObject

USTRUCT()生成反射,不需要派生自UObject

GENERATED_BODY()UE4替换为相关的生成代码

UPROPERTY:变量

UFUNCTION:方法

示例

#include "MyObject.generated.h"UCLASS(Blueprintable)
class UMyObject : public UObject
{GENERATED_BODY()public:MyUObject();UPROPERTY(BlueprintReadOnly, EditAnywhere)float ExampleProperty;UFUNCTION(BlueprintCallable)void ExampleFunction();
};
  • Blueprintable - 该类可以由蓝图扩展。

  • BlueprintReadOnly - 该属性可以从蓝图读取,但不能写入蓝图。

  • EditAnywhere - 该属性可以在原型和实例上的属性窗口中编辑。

  • Category - 定义该属性将出现在编辑器“细节(Details)”视图下面的哪个部分。这对于整理结构而言十分有用。

  • BlueprintCallable - 该功能可以从蓝图调用。

(四)迭代器介绍

对象迭代器:迭代特定类型的UObject及其子类

// 查找所有当前UObject实例,不包括子类
for (TObjectIterator<UObject> It; It; ++It)
{UObject* CurrentObject = *It;UE_LOG(LogTemp, Log, TEXT("Found UObject named:%s"), *CurrentObject->GetName());
}
//包括子类
for (TObjectIterator<UMyClass> It; It; ++It)
{// ...
}

AActor也有自己的迭代器,

APlayerController* MyPC = GetMyPlayerControllerFromSomewhere();
UWorld* World = MyPC->GetWorld();// 正如对象迭代器一样,您可以提供一个具体类来仅获得
// 属于该类或派生自该类的对象
for (TActorIterator<AEnemy> It(World); It; ++It)
{// ...
}

使用Actor迭代器需要World,上述提供了一个获取World的方法。

(五)垃圾回收

UE4使用反射系统实现垃圾回收,继承自UObject的物体会实现自动垃圾回收,当没有有效引用的时候会实现垃圾回收。

void CreateDoomedObject()
{MyGCType* DoomedObject = NewObject<MyGCType>();
}

函数运行完成之后临时变量无引用,会在下一次垃圾清理的时候触发GC。

AActor只有在手动调用Destroy函数时才会在下一次GC时被销毁。

UStruct不参与GC。

继承FGCObject参与GC。

(六)字符串

FString类型字符串需要TEXT()宏创建。用途类似于std::String

FText使用NSLOCTEXT创建

FName使用字典处理,速度较快

(七)容器

主要包括TArray、TMap、TSet

TArray类似vector,TMap是键值对的集合,TSet是唯一值集合。

容器迭代器:

void RemoveDeadEnemies(TSet<AEnemy*>& EnemySet)
{// 从集开头处开始,迭代至集末尾for (auto EnemyIterator = EnemySet.CreateIterator(); EnemyIterator; ++EnemyIterator){// *运算符获取当前元素AEnemy* Enemy = *EnemyIterator;if (Enemy.Health == 0){//“RemoveCurrent”受TSet和TMap支持EnemyIterator.RemoveCurrent();}}
}// 将迭代器向后移动一个元素
--EnemyIterator;// 将迭代器向前/向后移动一定偏移量,这里的偏移量是个整数
EnemyIterator += Offset;
EnemyIterator -= Offset;// 获取当前元素的索引
int32 Index = EnemyIterator.GetIndex();// 将迭代器复位到第一个元素
EnemyIterator.Reset();

还可以使用foreach循环

// TArray
TArray<AActor*> ActorArray = GetArrayFromSomewhere();
for (AActor* OneActor :ActorArray)
{// ...
}// TSet——与TArray相同
TSet<AActor*> ActorSet = GetSetFromSomewhere();
for (AActor* UniqueActor :ActorSet)
{// ...
}// TMap——迭代器返回键-值对
TMap<FName, AActor*> NameToActorMap = GetMapFromSomewhere();
for (auto& KVP :NameToActorMap)
{FName Name = KVP.Key;AActor* Actor = KVP.Value;// ...
}

UE4学习(一)C++编程官方文档解读相关推荐

  1. HarmonyOS(一) 快速开始学习鸿蒙开发,官方文档学习路线解析

    系列文章目录 HarmonyOS(一):快速开始学习鸿蒙开发,官方文档学习路线解析 HarmonyOS(二):应用开发环境搭建准备 HarmonyOS(三):创建你的第一个HelloWorld应用 文 ...

  2. 蓝牙MESH 官方文档解读 翻译(1)

    已从事两年的物联网无线通信相关应用开发,但在接触蓝牙MESH相关技术时,一般都需要查询官方机构的文档,规范等,但发现网络上相应的中文资料较少,故对相关官方文档结合自身开发经验进行了翻译. 此部分摘自官 ...

  3. gateway的官方文档解读

    之前公司用了springcloud的gateway.被一个伙伴留下了一堆的坑,没办法只能从头梳理. 第一步就是确定架构, gateway+consul+springboot 第二步就是确定一个flag ...

  4. Mybatis官方文档解读

    跟着Mybatis的官方文档总结一下.~ 简介 什么是mybatis? mybatis是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射.Mybatis免除了所有的JDBC代码以及 设置 ...

  5. splash官方文档解读(翻译)

    安装 splash是一个类似于selenium的自动化浏览器,不过它与selenium还是有很大区别的:比如splash是异步的,splash暴露httpAPI来自动化操作. 安装很简单,需要先安装d ...

  6. torch.unsqueeze官方文档解读

    文章目录 前言 1. 功能介绍 2. 参数说明 3. 代码举例 前言 本文是对torch.unsqueeze官方文档的解读,加入部分代码示例,方便理解. 1. 功能介绍 torch.unsqueeze ...

  7. python官方文档学习_Python3.5.2官方文档学习备忘录

    一个简单oop的changeTab 好多地方都会用到这样一个效果"点击tab切换内容页",根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对 ...

  8. Spring官方文档解读(五)之自定义 bean 的性质

    Spring 框架提供了许多接口,可用于自定义 Bean 的性质.本节将它们分组如下: Lifecycle Callbacks ApplicationContextAware 和 BeanNameAw ...

  9. 华为服务器BMC方式安装系统-官方文档解读

    华为服务器BMC方式安装系统 1 写作目的 本篇文档的目的是帮助读者能够完成掌握华为服务器操作系统的安装方式,以应对我们日常运维工作中某些应用场景. 2 实验环境 使用华为RH5885 V3 服务器为 ...

最新文章

  1. python运行慢-Python运行效率慢?因为你不知道这六大窍门!
  2. 转 Django+Bootstrap练习--我的类博客系统开发
  3. yum更换本地源、yum下载和源码包安装
  4. python实现rm_python winrm模块使用
  5. 【经验分享】产品、运营人如何告别重复的数据分析工作?
  6. BigDecimal加减乘除
  7. 正式发布 .Net2.0 大文件上传服务器控件
  8. (Object detection)目标检测从入门到精通——第四部分anchor box
  9. 『007』MySQL
  10. swift VFL - 父视图是scrollview 注意点
  11. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_19-页面查询服务端开发-创建CMS服务工程-CMS工程结构...
  12. 如何撰写网络营销策划方案?
  13. 罗技G29方向盘linux下的开发
  14. instagram下载的工具instaloader
  15. 人生不设限,要勇于去闯_《不如去闯》读书心得
  16. 华为harmonyos手机开发者,华为鸿蒙HarmonyOS2.0手机开发者Beta版正式发布
  17. 网易云计算机专业课程,网易云课堂推出在线中国大学MOOC课程
  18. 下拉菜单和文本框结合
  19. RSA已知密文和公钥
  20. android在线播放儿歌源码,亲宝儿歌播放器手机版

热门文章

  1. Python操作SQLServer
  2. 数字图像处理之matlab实验(五):形态学图像处理
  3. python比例图_python在地图上画比例的实例详解
  4. Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)
  5. 独角兽项目 3 - 反叛军
  6. 计算机组成与设计硬件/软件接口 (MIPS版)
  7. Nagios 被动检测oracle Rman备份情况
  8. WebMvcConfigurer配置HandlerInterceptor拦截器失效
  9. Html table添加空行
  10. php调用会员刷卡,dedecms模板中调用会员信息标签的方法