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 ...
随机推荐
- SpringMVC请求参数接收总结(一)
前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...
- 通过 Python 理解 Mixin 概念
Mixin 的概念 Mixin 即 Mix-in,常被译为"混入",是一种编程模式,在 Python 等面向对象语言中,通常它是实现了某种功能单元的类,用于被其他子类继承,将功能组 ...
- HTML5的一些验证挺方便的
一些基本的验证都可以很简单的实现,节省了很多繁琐的步骤.
- 记一次将本地工程上传到github的过程
记一次将本地工程上传到github的过程 1.首先,进入本地工程所在文件夹,运行git init将工程初始化为git仓库: XH@DESKTOP-82MT9LU MINGW64 ~/Desktop/t ...
- java程序员面试宝典之——Java 基础部分(1~10)
基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包 ...
- pngquant——一个好用的png压缩工具
一个可以进行有损图片压缩的命令行工具和代码库. 网址:https://pngquant.org/ 1.为什么选择pngquant 传说中的神器——tinyPng 我们现在用的工具——ImageAlph ...
- NSURLConnection发送GET请求
// ViewController.m // 04-掌握-NSURLConnection发送GET请求 // // Created by xiaomage on 16/2/22. // Copyrig ...
- PHP数组总汇
数组,顾名思义,本质上就是一系列数据的组合.在这个组合中,每个数据都是独立的,可以对每个单独的数据进行分配和读取.PHP对数据的操作能力非常强大,尤其是PHP为程序开发人员提供了大量方便.易懂的数组操 ...
- list tuple dict 方法
>>> dir(list)['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir_ ...
- java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...