Aery的UE4 C++游戏开发之旅(2)编码规范

目录

  • C++基础类型规范
  • 命名规范
  • 头文件规范
  • 字符串规范
  • 字符集规范
  • 参考

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尺寸)。
  1. 当需要明确基础类型尺寸大小(例如需要序列化等功能),应使用可移植的类型。
  2. 如果代码中的整型类型大小不是很重要,可直接使用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;
}

命名规范


  1. 命名(如类型或变量)中的每个单词需大写首字母,单词间通常无下划线。

    例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。

  2. bool变量必须以b为前缀(例如 bPendingDestruction 或 bHasFadedIn)。
  3. 类型名前缀需使用额外的大写字母,用于区分其和变量命名。

    例如:FSkin 为类型名,而 Skin 则是 FSkin 的实例。

    类型命名前缀规范如下:

    蓝图类别 前缀
    继承自 UObject U
    继承自 AActor A
    继承自 SWidget S
    抽象界面类的前缀 I
    枚举类的前缀 E
    模板类 T

    其他多数类均以F为前缀,而部分子系统则以其他字母为前缀。

    模板实例化的Typedef不再是模板,并应加上相应前缀,例如:typedef TArray<FMytype> FArrayOfMyTypes;

  4. 蓝图命名:"BP"+类别缩写+"_"+名字

    例如: BPA_Player

    蓝图类别 前缀
    蓝图Actor BPA_
    蓝图结构 BPS_
    蓝图枚举 BPE_
    蓝图接口 BPI_
    蓝图函数库 BFL_
    蓝图宏库 BML_

头文件规范


  • 确保自己include的头文件不要放在 "XXX.generated.h" 文件下面,因为Unreal Header Tool编译工具默认这个文件就是头文件列表的最后一行了。

继承于UObject的类型统统都可以使用这些功能,不过还得需要额外一个宏定义UCLASS()包装下:

UCLASS()
class MYPROJECT_API UMyObject : public UObject
{
    GENERATED_BODY()

};

字符串规范


  • 在字符串字面量周围使用 TEXT() 宏:若未使用,在文字中构建 FStrings 的代码将导致不理想的字符转换过程。
"Hello World!";         //Not so well

TEXT("Hello World!");   //OK

字符集规范


  • 应将C++代码文件都保存为utf8格式:否则可能会出现在UE4蓝图中调用C++代码(函数、类等)时,出现注释乱码的情况。

参考


系列其他文章:Aery的UE4 C++开发之旅系列文章

原文地址:https://www.cnblogs.com/KillerAery/p/12023696.html

时间: 2024-11-02 18:32:04

Aery的UE4 C++游戏开发之旅(2)编码规范的相关文章

Aery的UE4 C++游戏开发之旅(3)蓝图

目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 方案比较 参考 蓝图 大家都知道,蓝图是UE4提供的极其容易上手的一种可视化脚本,更具体的就不说了. 纯靠蓝图搭建的UE4游戏是存在的,但是这类游戏往往优化很差(除非游戏玩法本身的性能需求不高).更合适的流程往往需要程序员编写C++代码创建一些蓝图可用元素,而设计师再通过蓝图快速搭建游戏. 蓝图命名

Aery的UE4 C++游戏开发之旅(4)加载资源&amp;创建对象

目录 资源的硬引用 硬指针 FObjectFinder<T> / FClassFinder<T> 资源的软引用 FSoftObjectPaths.FStringAssetReference TSoftObjectPtr<T> 同步加载资源 LoadObject/LoadClass TryLoad/LoadSynchronous 异步加载资源 FStreamableManager.RequestAsyncLoad() 卸载资源 创建对象 创建一般对象 创建Actor派生类

Android游戏开发之旅 View类详解

自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int, int) 当view的大小发生变化时触发 onDraw(Canvas) view渲染内容的细节 onKeyDown(int, KeyEvent

Cocos2d-x 3.x游戏开发之旅 笔记

#include "HelloWorldScene.h"#include "SimpleAudioEngine.h"#include "MyHelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene(){ // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autore

从软件开发角度,审视编码规范

本文综述:编码实践中遇到的问题总结和分析(实践总结) 1. 将单一的功能独立出来,不要将代码写成一坨坨的:功能独立出来后,能够从主程序中看出主要的逻辑(易于整理处理文档),而不是什么都看不出来. 2. 适当的做重构,不要等到代码写完了再考虑重构,重复的部分尽量不要写. 3. 代码做到简洁.干净.不做过多的逻辑判断. 4. 编码中发现:如果一个方法需要很长时间执行完成,而其后的执行逻辑仅仅是赋值操作,很可能后面的代码会在前执行(打印Log,跟踪代码逻辑). 5. (撰写代码方法学)写一个功能,获取

cocos2d-x 游戏开发之有限状态机(FSM) (四)

cocos2d-x 游戏开发之有限状态机(FSM) (四) 虽然我们了解了FSM,并且可以写自己的FSM,但是有更好的工具帮我们完成这个繁琐的工作.SMC(http://smc.sourceforge.net/)就是这样的工具.下载地址: http://sourceforge.net/projects/smc/files/latest/download 在bin下面的Smc.jar是用于生成状态类的命令行工具.使用如下命令: $ java -jar Smc.jar Monkey.sm 1 真实世

Cocos2d-x 3.x游戏开发之旅

Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x 3.x游戏开发之旅>是<Cocos2d-x游戏开发之旅>的升级版,修改了Cocos2d-x 2.0版进阶到3.0版后的一些内容,新增了对CocoStudio.UI编辑器.Cocos2d-x 3.x新特性以及网络方面的知识点.主要介绍常用的API使用方式:如何通过官方Demo获取更多关于Coc

cocos2d-x 游戏开发之有限状态机(FSM) (一)

cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游戏开发之旅>(钟迪龙) 基本上所有的软件都是有限状态机(finite-state machine,FSM).它是一个有向图,由一组节点和一组相应的转移函数组成.通俗点讲,它是一个事件驱动系统的模型,这个模型由有限数目的状态,若干输入和状态与状态之间转换的规则组成.在某一时刻,有一个或一组状态是FSM的当

Android开发编码规范(自用)

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下Java的编码风格和标准 指导原则 1)首先是为人编写程序,其次才是计算机.这是软件开发的基本要点,软件的生命周期贯穿产品的开发.测试.生产.用户使用.版本升级和后期维护等长期过程,只有易读.易维护的软件代码才具有生命力. 2)保持代码的简单清晰,避免过分的编程技巧.保持代码的简单化是软件工程化的