Aery的UE4 C++游戏开发之旅(2)编码规范
C++基础类型规范
由于PC、XBOX、PS4等各平台的C++基础类型大小可能不同(实际上绝大部分都是整型类型的大小不同),因此UE4提供了如下可移植基础类型的别名来统一规范类型大小:
- bool 代表布尔值(不会假定布尔尺寸)。
- TCHAR 代表字符(不会假定TCHAR尺寸)。
- uint8 代表无符号字节(1字节)。
- int8 代表带符号字节(1字节)。
- uint16 代表无符号“短”字符(2字节)。
- int16 代表带符号“短”字符(2字节)。
- uint32 代表无符号整数(4字节)。
- int32 代表带符号整数(4字节)。
- uint64 代表无符号“四字”(8字节)。
- int64 代表带符号“四字”(8字节)。
- float 代表单精确浮点(4字节)。
- double 代表双精确浮点(8字节)。
- PTRINT 代表可能含有指针的整数(不会假定PTRINT尺寸)。
- 当需要明确基础类型尺寸大小(例如需要序列化等功能),应使用可移植的类型。
- 如果代码中的整型类型大小不是很重要,可直接使用C++的 int 和无符号 int 类型(不同的平台上的大小可能不同),典型的例子是用于循环的整型变量i。
个人认为,如果想更简单明了地选择类型的话,那么建议在类/结构体的声明部分(变量/函数返回值/函数参数等)使用可移植类型,而函数实现里出现的某些无关紧要的临时变量(例如循环体的整型变量i)则可以直接使用C++基础类型。
UCLASS()
class MYPROJECT_API USomething: public UObject{
UPROPERTY()
int32 ID;
UFUNCTION()
uint32 GetValue();
};
uint32 USomething::GetValue(){
uint32 value = 0;
for(int i = 0; i < vec.size(); ++i){
value += vec[i];
}
return value;
}
命名规范
命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。
例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。
bool变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。
类型名前缀需使用额外的大写字母,用于区分其和变量命名。
例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。
类型命名前缀规范如下:
蓝图类别 前缀 继承自 UObject U 继承自 AActor A 继承自 SWidget S 抽象界面类的前缀 I 枚举类的前缀 E 模板类 T 其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。
模板实例化的Typedef不再是模板,并应加上相应前缀,例如:typedef TArray<FMytype> FArrayOfMyTypes;
蓝图命名:"BP"+类别缩写+"_"+名字
例如: BPA_Player
蓝图类别 前缀 蓝图Actor BPA_ 蓝图结构 BPS_ 蓝图枚举 BPE_ 蓝图接口 BPI_ 蓝图函数库 BFL_ 蓝图宏库 BML_
头文件规范
- 确保自己include的头文件不要放在 "XXX.generated.h" 文件下面,因为Unreal Header Tool编译工具默认这个文件就是头文件列表的最后一行了。
字符串规范
- 在字符串字面量周围使用 TEXT() 宏:若未使用,在文字中构建 FStrings 的代码将导致不理想的字符转换过程。
"Hello World!"; //Not so well
TEXT("Hello World!"); //OK
字符集规范
- 应将C++代码文件都保存为utf8格式:否则可能会出现在UE4蓝图中调用C++代码(函数、类等)时,出现注释乱码的情况。
错误处理规范
- 不要使用C++异常机制(try,catch),UE4代码默认是不支持的,推荐使用Assertions。
//example
int i=1;
verify(i==0);
具体UE4提供的断言可查看:虚幻引擎4 官方文档 | 断言相关规范
参考
系列其他文章:Aery的UE4 C++开发之旅系列文章
Aery的UE4 C++游戏开发之旅(2)编码规范的更多相关文章
- Aery的UE4 C++游戏开发之旅(1)基础对象模型
目录 UObject Actor种类 AActor APawn(可操控单位) AController(控制器) AGameMode(游戏模式) AHUD(HUD) ... Component种类 UA ...
- Aery的UE4 C++游戏开发之旅(3)蓝图
目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...
- Aery的UE4 C++游戏开发之旅(4)加载资源&创建对象
目录 资源的硬引用 硬指针 FObjectFinder<T> / FClassFinder<T> 资源的软引用 FSoftObjectPaths.FStringAssetRef ...
- Aery的UE4 C++游戏开发之旅(5)字符&字符串
目录 TCHAR 字符 使用TEXT()宏包裹字符串字面量 转换字符编码 FString 字符串 FString 剖析 FString 使用 FName 字符串 FName 剖析 FName 使用 F ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- 【安全开发】IOS安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- 【安全开发】Android安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- 《cocos2d-x游戏开发之旅》问题2016-10-7
今天按书上做,遇到问题卡住了 书P115 项目是 littlerunner
- Cocos2d-x 3.x游戏开发之旅 笔记
#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#include "MyHello ...
随机推荐
- 复制节点(cloneNode)
DOM提供用来复制节点方法. cloneNode():将为给定节点创建一个副本,这个方法的返回值是一个指向新建克隆节点的引用指针, reference = node.cloneNode(deep) 这 ...
- C# 异步并发操作,只保留最后一次操作
在我们业务操作时,难免会有多次操作,我们期望什么结果呢? 绝大部分情况,应该是只需要最后一次操作的结果,其它操作应该无效. 自定义等待的任务类 1. 可等待的任务类 AwaitableTask: // ...
- 【JAVA - 基础】之String存储机制浅析
本文主要解决以下几个问题 String源码解析? String和new String的区别? String通过"+"或concat累加时的对象创建机制? StringBuilder ...
- 【tf.keras】实现 F1 score、precision、recall 等 metric
tf.keras.metric 里面竟然没有实现 F1 score.recall.precision 等指标,一开始觉得真不可思议.但这是有原因的,这些指标在 batch-wise 上计算都没有意义, ...
- Linux安装图像页面的命令
在shell里输入: sudo apt-get install x-window-system-core #安装x-windows的基础 sudo apt-get install gdm #安装登录管 ...
- 数据结构与算法之java语言实现(一):稀疏数组
一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...
- 2019-2020-1 20199304《Linux内核原理与分析》第一周作业
通过对Linux基础课程的学习,我对Linux的背景以及和Windows的区别有了了解, Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠 ...
- ruby传参之引用类型
ruby是完全面向对象语言,所有的变量所储存的,其实是对象的引用. 所以ruby方法的参数,也都是引用类型.即使是基本的类型,比如布尔,整数,小数等,也是一样. class MyObject attr ...
- 十一次作业——LL(1)文法的判断,递归下降分析程序
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...
- Webstorm相关设置
[1.快速激活Webstorm] http://jingyan.baidu.com/article/9f63fb919674f2c8400f0e9a.html [2.webstorm 2017 激活破 ...