Aery的UE4 C++游戏开发之旅(2)编码规范
2019-12-12 12:17
357 查看
[toc]
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++游戏开发之旅(3)蓝图
- Aery的UE4 C++游戏开发之旅(4)加载资源&创建对象
- 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)
- 游戏开发之在UE4中编写C++代码控制角色
- 游戏开发之在UE4中编写C++代码控制角色
- 游戏开发之在UE4中编写C++代码控制角色
- 游戏开发之在UE4中编写C++代码控制角色
- 游戏开发之在UE4中编写C++代码控制角色
- 游戏开发之在UE4中编写C++代码控制角色
- 【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中访问object函数以及Apple Api
- 史上最全的C++/游戏开发面试问题总结(一)——C++基础
- C++游戏开发实战视频教程
- C++游戏开发实战视频教程
- Objective-C开发编码规范
- 游戏开发c++ VS2010配置DirectX开发环境的方法
- 团队项目开发"编码规范"之三:程序注释
- java开发规范总结_代码编码规范
- Objective-C编码规范:26个方面解决iOS开发问题