Gamemakin UE4工程规范() {
最合理的UE4规范
为Unreal Engine 4开发的Linter插件
一套可以自动检查UE4工程规范的插件已经在虚幻商城出售。插件源码会免费提供,但为了避免编译源码,请从虚幻商城上下载该插件使用。
讨论该规范
Gamemakin LLC 有一个公开的讨论板块,地址是http://discord.gamemak.in ,如果你有关于本套规范或者插件的任何想法,都可以在其中的#linter频道中讨论。
链接到本文档
本文(英文原文)的任何章节都有数字超链接地址,你可以直接通过本文的短地址http://ue4.style 再加上章节编号,直接链接到本文的任意位置。
例如,如果你想链接到本文的第一节,可以使用地址http://ue4.style#0.1
专业术语
Levels/Maps(关卡/地图)
“map”(地图)这个词通常也会被称为“level”(关卡),两者的含义是等同的,在这里可以查看这个词的发展经历
Cases(大小写)
对于字母大小写的规范有数种,以下是几种常见的几种
PascalCase
每个单词的首字母都是大写,单词之间没有其他字符,例如 :DesertEagle, StyleGuide, ASeriesOfWords。
camelCase
第一个单词的首字母小写,后面的单词的首字母大写,例如:desertEagle, styleGuide, aSeriesOfWords。
Snake_case
单词之间用下划线链接,单词的首字母可以大写也可以小写,例如:desert_Eagle, Style_Guide, a_Series_of_Words
Variables / Properties(变量/属性)
'变量'和'属性'两个词在很多情况下是可以互相通用的。但如果他们同时出现在一个环境时,含义有一些不同:
Property (属性)
'属性'通常定义在一个类的内部。例如,如果一个类BP_Barrel有一个内部成员bExploded,那么bExploded可以是做是BP_Barrel的一个属性
当'属性'用在类的内部时,通常用来获取已经定义好的数据
Variable (变量)
'变量'通常用在给函数传递参数,或者用在函数内的局部变量
当'变量'用在类的内部时,通常是用来定义什么或者用来保存某些数据的。
0. 原则
0.1 如果你的项目已经存在现有规范,那么请继续遵守这套规范。
如果你工作的项目或你的团队已经有一套自己的规范,那么请尊重它。如果现有规范和本套规范发生冲突,请继续遵守原规范。
好的项目规范应该是不断进步的,当你发现有好的更改可以适合所有用户时,你应该建议去更改现有规范
"对规范优劣的争论是没有意义的,有规范你就该去遵守。"
0.2 不管团队中有多少人,工程中所有的数据结构、资源、代码风格应该统一,如同是同一个人的作品
把资源从一个工程迁移到另一个工程不应该产生新的学习成本,所有资源应该符合项目规范,消除不必要的歧义和不确定性
遵守规范可以促进对于项目的生产和维护效率,因为团队成员不用去考虑规范问题,只需要去遵守。本套规范根据诸多优秀经验编写,遵守它意味着可以少走很多弯路。
0.3 好哥们也得讲原则。
如果你发现同事不遵守规范,你该去纠正他
当你在团队中工作时,或者在社区提问时(例如Unreal Slackers),你会发现如果大家都遵守同一套规范会容易的多,没有人愿意在面对一堆乱糟糟的蓝图或者莫名其妙的代码时帮你解决问题。
如果你要帮助的人使用另一套不同但很健全的规范,你应该去适应它,如果他们没有遵守任何规范,那么带他们来这儿。
0.4 没有规范的团队不是真正的团队
当你要加入一个新的UE4团队时,你应该首先问他们有没有项目规范,如果没有的话,你该怀疑他们是否有能力像一个真正的团队那样工作
目录
1. 资源命名约定
对于资源的命名的规范应该像法律一样被遵守。一个项目如果有好的命名规范,那么在资源管理、查找、解析、维护时,都会有极大的便利性。
大多数资源的命名都应该有前缀,前缀一般是资源类型的缩写,然后使用下划线和资源名链接。
1.1 基本命名规则 Prefix_BaseAssetName_Variant_Suffix
时刻记住这个命名规范Prefix_BaseAssetName_Variant_Suffix,只要遵守它,大部分情况下都可以让命名规范。下面是详细的解释。
Prefix(前缀) 和 Suffix(后缀)由资源类型确定,请参照下面的资源类型表。
所有资源都应该有一个BaseAssetName(基本资源名)。所谓基本资源名表明该资源在逻辑关系上属于那种资源,任何属于该逻辑组的资源都应该遵守同样的命名规范
基本资源名应该使用简短而便于识别的词汇,例如,如果你有一个角色名字叫做Bob,那么所有和Bob相关的资源的BaseAssetName都应该叫做Bob
Varient(扩展名)用来保证资源的唯一性,同样,扩展名也应该是简短而容易理解的短词,以说明该资源在所属的资源逻辑组中的子集。例如,如果Bob有多套皮肤,那么这些皮肤资源都应该使用Bob作为基本资源名同时包含扩展名,例如'Evil'类型的皮肤资源,名字应该是Bob_Evil,而Retro类型的皮肤应该是用Bob_Retro
一般来说,如果仅仅是为了保证资源的唯一性,Varient可以使用从01开始的两位数字来表示。例如,如果你要制作一堆环境中使用的石头资源,那么他们应该命名为Rock_01, Rock_02, Rock_03等等。除非特殊需要,不要让数字超过三位数,如果你真的需要超过100个的资源序列,那么你应该考虑使用多个基础资源名
基于你所制作的资源扩展属性,你可以把多个扩展名串联起来。例如,如果你在制作一套地板所使用的资源,那么你的资源除了使用Flooring作为基本名,扩展名可以使用多个,例如Flooring_Marble_01, Flooring_Maple_01, Flooring_Tile_Squares_01。
1.1 范例
1.1e1 Bob
资源类型
资源名
Skeletal Mesh
SK_Bob
Material
M_Bob
Texture (Diffuse/Albedo)
T_Bob_D
Texture (Normal)
T_Bob_N
Texture (Evil Diffuse)
T_Bob_Evil_D
1.1e2 Rocks
资源类型
资源名
Static Mesh (01)
S_Rock_01
Static Mesh (02)
S_Rock_02
Static Mesh (03)
S_Rock_03
Material
M_Rock
Material Instance (Snow)
MI_Rock_Snow
1.2 资源类型表
当给一个资源命名的时候,请参照以下表格来决定在资本资源名前后所使用的前缀和后缀
目录
1.2.6 纹理Textures
1.2.9 物理Physics
1.2.10 声音Sound
1.2.12 特效Effects
1.2.1 通用类型
资源类型
前缀
后缀
备注
Level (Persistent)
_P
Level (Audio)
_Audio
Level (Lighting)
_Lighting
Level (Geometry)
_Geo
Level (Gameplay)
_Gameplay
Blueprint
BP_
Material
M_
Static Mesh
S_ or SM_
选一个,建议使用 S_.
Skeletal Mesh
SK_
Texture
T_
_?
参照纹理
Particle System
PS_
Widget Blueprint
WBP_ or WB_
选一个,建议使用 WBP_.
1.2.2 动作
资源类型
前缀
后缀
备注
Aim Offset
AO_
Aim Offset 1D
AO_
Animation Blueprint
ABP_
Animation Composite
AC_
Animation Montage
AM_
Animation Sequence
A_ or AS_
选一个,建议使用 A_.
Blend Space
BS_
Blend Space 1D
BS_
Level Sequence
LS_
Morph Target
MT_
Paper Flipbook
PFB_
Rig
Rig_
Skeletal Mesh
SK_
Skeleton
SKEL_
1.2.3 AI
资源类型
前缀
后缀
备注
AI Controller
AIC_
Behavior Tree
BT_
Blackboard
BB_
Decorator
BTDecorator_
Service
BTService_
Task
BTTask_
1.2.4 蓝图
资源类型
前缀
后缀
备注
Blueprint
BP_
Blueprint Function Library
BPFL_
Blueprint Interface
BPI_
Blueprint Macro Library
BPML_
可能的话尽量不要使用蓝图宏
Enumeration