No title

No title
Edmend ZhangUE 基础gainian
必要的规范
以下规范仅作部分内容展示,随着文章推进逐步在后文补充,无法就此处进行展开.
命名规范:
1.U++根据继承的父类及使用的功能分类进行命名:
 a.继承自UObject的请使用U开头
 b.继承自SWidget的请使用S开头
 c.继承自AAcotr的请使用A开头
 d.接口的类前缀为I
 e.模板的类前缀为T
 f.枚举的前缀为E
 g.布尔变量前缀为b
 h.其他多数类均以F为前缀,如结构体
 i.动态多播,动态单播请以F开头,单播和多播建议以F开头
 j.Typedefs应以任何与其类型相符的字母为前缀:若为结构体的Typedefs,则使用F;若为 Uobject 的Typedefs,则使用U,以此类推。
    k.特化的Typedef不再是模板,并应加上相应前缀,例如:typedef TArray
2.UHT需要正确的前缀,因此添加前缀很重要
3.类型和变量的命名为名词
4.方法名是动词,以描述方法的效果或被方法影响的返回值
5.所有返回布尔的函数应发起true/false的询问,如IsVisible()或ShouldClearBuffer()
6.U++建议使用大驼峰的命名方式,但是与C库和C++库等交互使用时,使用对应语言的写法亦可
7.蓝图命名规范,一般以BP_,WBP_,M_,ABP_等为前缀
8.C++对于供蓝图调用的方法一般可以使用K2_前缀开头,然后使用meta里面的Displayname来屏蔽K2_
生命周期
1.单例的UObject推荐使用Subsystem进行管理.不要再用老式C++的单例写法,比如什么饿汉式,懒汉式之类的,人都给我看麻了.
- 结构体推荐使用智能指针进行管理.没事没用new和delete这两个关键字,咱们不兴这个.当然你接第三库的话,当我没说.
 
注释格式
- 采用JavaDocs格式,多行或单行.以下给出函数,类,变量等参考.其实你可以应该看源码.
 
1  | /**  | 
- 你应当再每一个.h,.cpp,.cs文件第一行表明版权声明.如果是.h文件一定要包含”#pragma once”,避免多次包含编译.
 
1  | // Copyright Epic Games, Inc. All Rights Reserved.  | 
项目协作
- 请勿多人同时修改一个蓝图,会造成蓝图的损坏!!!!特别是那个什么关卡蓝图.这种情况就只能保留一个人的工作.
 - 尽量不要把ini文件给锁了或者改来改去,解决冲突真的很烦!
 
编码细节
FRotator的默认构造函数时Pitch,Yaw,Roll.而蓝图里面的是Roll,Pitch,Yaw.注意使用区分.
强制内敛FORCEINLINE,可用于简单的Get方法,不要在里面写复杂语句及循环等.
在不考虑代码膨胀的情况下,推荐使用Gameplay架构关卡.GameMode运行规则,GameState存放运行数据,PlayerController响应用户控制,PlayerState存放用户数据,HUD管理MainUI,PlayerCharacter为用户控制的角色.
4.推荐在.h文件中前置声明,在.cpp文件实际include,加快编译速度,避免代码膨胀.但有时候前置声明也会带来意想不到的错误.带反射的结构体请直接包含头文件,说的就是GAS的结构体!
参考以下文章:
https://www.zhihu.com/question/63201378
对于重写的方法请务必使用vitrual及override,推荐表明继承自哪个类,析构函数请虚!
TMap在Num=0的时候去find会崩溃,在运行前判断TMap的数量是否为空,直接返回.这个可能不准确,属于我遇见的奇奇怪怪的问题.
注释日志输出的管理,对应 不同的核心模块建议自定义输出日志,同时应注意日志的输出级别,Display,Error,Warning等.
采用提炼和反转来避免代码的嵌套深度,嵌套深度不宜超过3.
不要在非主线程去对UMG,UObject,Actor及其派生类进行增删改查,你会Crash!也不要去打印日志,你也会Crash!
资产规范
请对各类资产文件分类别放.
此处贴出Lyra内容目录:
此处给出常见资产命名,仅供参考
| 资产 | 前缀 | 
|---|---|
| 通用 | / | 
| 关卡 | L_ | 
| HDRI | HDR_ | 
| 材质 | M_ | 
| 材质实例 | MI_ | 
| 物理资产 | PHYS_ | 
| 物理材质 | PM_ | 
| 后期处理材质 | PPM_ | 
| 骨骼网格体 | SK_ | 
| 静态网格体 | SM_ | 
| 纹理 | T_ | 
| OCIO配置文件 | OCIO_ | 
| 蓝图 | / | 
| Actor组件 | AC_ | 
| 动画蓝图 | ABP_ | 
| 蓝图接口 | BI_ | 
| 曲线表 | CT_ | 
| 数据表 | DT_ | 
| 枚举 | E_ | 
| 结构 | F_ | 
| 控件蓝图 | WBP_ | 
| 粒子效果 | / | 
| Niagara发射器 | FXE_ | 
| Niagara系统 | FXS_ | 
| Niagara函数 | FXF_ | 
| 骨骼网格体动画 | / | 
| 绑定 | Rig_ | 
| 骨架 | SKEL_ | 
| 蒙太奇 | AM_ | 
| 动画序列 | AS_ | 
| 混合空间 | BS_ | 
| ICVFX | / | 
| NDisplay配置 | NDC_ | 
| 动画 | / | 
| 关卡序列 | LS_ | 
| Sequencer编辑 | EDIT_ | 
| 媒体 | / | 
| 媒体源 | MS_ | 
| 媒体输出 | MO_ | 
| 媒体播放器 | MP_ | 
| 媒体配置文件 | MPR_ | 
| 其他 | / | 
| 关卡快照 | SNAP_ | 
| 远程控制预设 | RCP_ | 







