UE(目录结构,代码规范)

目录结构

1. Content 文件夹
  • 用途:存放资源
  • 可以自定义如下子文件夹,名称自定义:
    • Materials:存放所有材质文件(.umaterial)。
    • Textures:存放所有纹理图片(.utexture2d等)。
    • Meshes:存放所有3D模型文件(.fbx、.obj导入后生成的.uasset)。
    • Sounds:存放音效文件(.wav、.ogg等)。
    • Blueprints:存放蓝图资源,包括蓝图类、蓝图函数库等。
    • Levels:存放关卡文件(.umap)。
    • UI:存放用户界面元素,如Slate UI或UMG组件。
    • Animation:存放动画资源,如动画蓝图、动画序列等。
    • Particles:存放粒子系统资源。
    • Shaders:存放自定义着色器代码(虽然着色器通常在Materials中通过Material Editor或ShaderGraph创建)。
2. Source 文件夹
  • 用途:存放项目的C++源代码文件
  • 子文件夹:
    • 项目名:这是自动生成的,与你的项目名称相同,包含项目的核心源代码和配置文件。
      • Public:存放公共头文件(.h),这些文件可以被项目中的其他模块引用。
      • Private:存放私有实现文件(.cpp),这些文件包含类的具体实现,通常不会被项目外的其他模块直接访问。
      • 项目名.Build.cs:这是项目的构建配置文件,用于定义项目的依赖关系、编译设置等。
    • 其他模块:项目可以包含多个模块,每个模块都有自己的PublicPrivate.Build.cs文件。
3. Binaries 文件夹
  • 用途:存放编译后的二进制文件,包括可执行文件、动态链接库(DLLs)等。
  • 注意:在构建游戏或项目时,编译器会在这个文件夹下生成必要的文件。对于发布游戏,可能会从这里复制最终的可执行文件和必要的资源。
4. 其他重要文件夹
  • Config:存放项目配置文件,虽然这些文件通常位于Source目录下的模块文件夹内,但也可能在项目的根目录或其他特定位置。
  • Intermediate:存放编译过程中的临时文件,这个文件夹通常不需要手动干预。
  • Saved:存放编辑器会话和项目的保存数据,如编辑器布局、自定义的关卡编辑器内容等。

代码规范

1. 命名约定
  • 类型命名:
    • 使用大驼峰命名法(CamelCase)。
    • U 前缀用于 UObject 及其派生类。
    • A 前缀用于 AActor 及其派生类。
    • S 前缀用于 Slate UI 组件(如 SWidget)。
    • F 前缀用于结构体(Struct)。
    • E 前缀用于枚举(Enum)。
    • I 前缀用于接口类。
  • 变量命名:
    • 使用小写字母开头,单词间使用下划线分隔(snake_case),但在C++类中通常使用小驼峰命名法(camelCase)。
    • 布尔变量以小写 b 开头(如 bIsVisible)。
2. 关键字
  • const:
    • 用于函数参数,表示该参数在函数内部不会被修改。
    • 用于成员函数,表示该函数不会修改对象的状态
    • 不在返回类型上使用 const
  • nullptr:
    • 总是使用 nullptr 而不是 NULL 或 0 来表示空指针。
  • auto:
    • 在循环迭代、类型推导复杂表达式结果时使用 auto 以提高代码可读性。
    • 避免在函数返回类型或类成员变量上使用 auto
  • override 和 final:
    • 在重写基类虚函数时使用 override 关键字,以确保重写正确无误。
    • 如果不希望某个类被进一步继承,可以在类定义后使用 final 关键字。
3. 代码风格
  • 大括号:
    • 总是将大括号放在新行上,以提高代码的可读性。
    • 即使只有一行代码,也使用大括号包围 ifforwhile 等语句块。
  • 注释:
    • 变量名和函数名应具有自描述性,以减少对注释的依赖。
    • 对于复杂的逻辑或算法,提供清晰的注释说明。
4. API 设计
  • 参数设计:
    • 避免使用过多的布尔参数,考虑使用枚举或结构体来封装相关参数。
    • 对于可选参数,考虑使用默认参数值或重载函数。
  • 返回值:
    • 尽可能使用返回值来传达函数执行的结果,而不是通过修改外部变量或输出参数。
    • 对于可能失败的操作,考虑使用返回值或异常来报告错误。
5. 性能优化
  • 移动语义:
    • 在需要传递大型对象或容器时,考虑使用移动语义(std::move)来避免不必要的拷贝。
  • 资源管理:
    • 使用智能指针(如 TSharedPtrTUniquePtr)来管理资源,以避免内存泄漏。
    • 注意对象的生命周期和所有权,确保在不再需要时及时释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值