虚幻引擎游戏开发系列专题-官方编码标准或规约

embedded/2024/12/25 1:06:14/

遵守既定标准和最佳实践来编写可维护的代码。在虚幻游戏引擎中,存在着一些既定的编码标准和约定 ,养成良好的编码规范是写好一份优雅代码的第一步,并且在虚幻官方也强调了,某些编码标准的遵循是强制性的。

编码规约对程序员来说意味着什么

  • 在软件开发中,软件生命周期的80%的成本都在维护上,几乎没有任何软件是由原作者终身维护的,游戏开发也不例外。
  • 代码规约提高了代码可读性、使得工程师可以快速、彻底的理解代码。
  • 编码规约帮助确保团队中的每个成员都遵循相同的代码风格和标准。这种一致性让开发人员在阅读和修改他人代码时,能快速理解其结构和意图,而不需要花费额外的时间去适应不同的风格。
  • 编码规约可以帮助避免不一致和混乱的代码风格,减少随之而来的技术债务(technical debt)。长时间的不规范编码会导致难以维护和扩展的代码,遵循编码规约有助于保持代码的整洁性。
  • 当团队成员都遵循统一的编码规约时,协作变得更加顺畅。代码审查(code review)也会变得更加高效,因为开发人员不需要花费大量时间去检查代码风格的问题,而是能更多地专注于代码的功能和质量。
  • 编码规约帮助确保代码结构清晰,逻辑一致,使得调试过程更加简便。如果代码中存在问题,开发人员可以快速定位和修复问题,而不会因为风格混乱而增加调试难度。
  • 对新成员而言,遵循团队的编码规约可以加速其熟悉代码库和开发流程的速度。如果每个人的编码风格差异较大,新成员可能需要花费更多时间去适应不同的代码风格。
  • 在某些情况下,编码规约还可能是为了符合特定的行业标准或规范,尤其是在涉及到游戏引擎、平台兼容性、性能优化等方面时。遵循这些标准可以避免潜在的兼容性或性能问题。

本文提到的编码标准以 C++ 为中心;然而,无论使用哪种语言,都应该遵循该标准。某个部分可能会在适用的情况下为特定语言提供等效规则或例外情况。


命名约定

使用命名约定时,所有的代码和注释都应该使用英语进行命名。

  • 名称(例如类型名称或变量名称)中每个单词的首字母大写。单词之间通常没有下划线。例如, HealthUPrimitiveComponent是正确的,但lastMouseCoordinatesdelta_coordinates则不正确。

  • 类型名称带有一个额外的大写字母作为前缀,以将其与变量名称区分开。例如, FSkin是类型名称,而Skin是类型FSkin的实例。

  • 模版类一T为前缀

    template <typename ObjectType>
    class TAttribute
    
  • 从UObject继承的类以 U 为前缀。

    class UActorComponent
    
  • 继承自AActor的类以 A 为前缀。

    class AActor
    
  • 从SWidget继承的类以 S 为前缀。

    class SCompoundWidget
    
  • 作为抽象接口的类以 I 为前缀。

    class IAnalyticsProvider
    
  • 枚举以 E 为前缀。

    enum class EColorBits
    {ECB_Red,    ECB_Green,   ECB_Blue
    };
    
  • 布尔类型变量必须以b为前缀

    bPendingDestruction
    bHasFadedIn
    
  • 类型和变量名称由名称组成。

  • 方法名称是动词,要么描述方法的效果,要么描述没有效果的方法的返回值。

  • 宏名称应完全大写,单词之间用下划线分隔,并以UE_为前缀。

    #define UE_AUDIT_SPRITER_IMPORT
    
  • 名称的范围越大,一个好的描述性名称就越重要。避免过度缩写。

  • 所有返回 bool 的函数都应该询问 true/false 问题,例如IsVisible()ShouldClearBuffer()

    bool IsVisible();        // "IsVisible" 是一个明确的询问:对象是否可见?
    bool ShouldClearBuffer(); // "ShouldClearBuffer" 明确地表示:是否应该清空缓冲区?
    

代码格式化

  • 始终在代码中包含完整大括号,例如:

    if (bThing)
    {return;
    }
    
  • if-else 语句中的每个执行块都应该放在大括号中。这有助于防止编辑错误。当不使用大括号时,有人可能会无意中向 if 块添加另一行。

    if (bHaveUnrealLicense)
    {InsertYourGameHere();
    }
    else
    {CallMarkRein();
    }
    
  • 多路 if 语句应该与每个else if缩进量与第一个if相同;这使得读者可以清楚地了解结构:

    if (TannicAcid < 10)
    {UE_LOG(LogCategory, Log, TEXT("Low Acid"));
    }
    else if (TannicAcid < 100)
    {UE_LOG(LogCategory, Log, TEXT("Medium Acid"));
    }
    else
    {UE_LOG(LogCategory, Log, TEXT("High Acid"));
    }
    

更多相关的详细内容可以前往官方文档进行查阅:https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine?application_version=5.4


http://www.ppmy.cn/embedded/148481.html

相关文章

第四章补充:线性代数(B站:一高数)

视频1&#xff1a;行列式的入门 原视频&#xff1a;线性代数&#xff01;启动&#xff01;从零开始到精通|第一集_哔哩哔哩_bilibili 一、二阶与三阶行列式 小学我们就接触过鸡兔同笼&#xff0c;这个问题让我们第一次接触到了方程组的思想。我们可以将它抽象成一个二元一次…

解决 Curl 自签名证书验证失败的实用指南

经过这些步骤仍然不能使用自签https, 报错的问题 curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure c…

ubuntu20.04安装imwheel实现鼠标滚轮调速

ubuntu20.04安装imwheel实现鼠标滚轮调速 Ubuntu 系统自带的设置中仅具备调节鼠标速度的功能&#xff0c;而无调节鼠标滚轮速度的功能。其默认的鼠标滚轮速度较为缓慢&#xff0c;在查看文档时影响尚可接受&#xff0c;但在快速浏览网页时&#xff0c;滚轮速度过慢会给用户带来…

kubevirt网络

六、KubeVirt网络 KubeVirt网络相关组件 用户在KubeVirt平台创建虚拟机只需创建一个vmi&#xff08;Virtual Machine Instance&#xff09;对象&#xff0c;之后virt-controller会根据vmi对象中的信息创建一个Pod&#xff0c;这里把这个Pod叫做vmi pod。Vmi pod中有kubevirt组…

LeetCode 54. 螺旋矩阵 (C++实现)

1. 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a; 输入&#xff1…

Jest 入门指南:从零开始编写 JavaScript 单元测试

前言 在前端开发中&#xff0c;单元测试已经成为确保代码质量和稳定性的关键步骤。Jest 作为由 Facebook 开发和维护的功能强大的 JavaScript 测试框架&#xff0c;以其易于配置、丰富的功能和开箱即用的特性&#xff0c;成为众多开发者的首选工具。本文旨在引导你从零开始&am…

12.12深度学习_CNN_项目实战

基于CNN的AnimalTriClassifier 关于项目实现的文档说明书&#xff0c;三个要素&#xff1a;数据、模型、训练 1、项目简介 关于项目的基本介绍。 本项目实现的是对猫科动物的划分&#xff0c;划分的物种有猫、狗、野生三种分类&#xff0c;属于小颗粒度分类 大颗粒度分类&…

React Router 深入指南:从入门到进阶

前言 随着单页面应用&#xff08;SPA&#xff09;的普及&#xff0c;前端路由成为开发中不可或缺的一部分&#xff0c;而 React Router 作为 React 官方推荐的路由库&#xff0c;提供了强大的功能和灵活性。本文将从基础到进阶&#xff0c;带你全面掌握 React Router。 一、初…