Appearance
代码规范
命名规范
在团队协作开发中,统一命名规范能显著提升代码可读性,使变量、函数、类等元素的用途一目了然,降低团队成员的理解和沟通成本;同时,它有助于减少因命名歧义、大小写错误或缩写不一致导致的逻辑错误,提高代码的健壮性。规范一致的命名还能加快功能维护与扩展的速度,便于新成员快速熟悉项目,并更好地与静态分析、文档生成等自动化工具集成。尤其在基于 UE5 与 C++ 的复杂项目中,涵盖 Gameplay、动画、网络同步等模块的清晰命名对提升协作效率和代码质量至关重要。因此,制定并严格执行统一的命名规范,是保障项目长期可维护性与团队高效协作的基础。
类/结构命名
每个单词的首字母大写。部分名称过长的类则为类名缩写_自定义类名(文末列出)
cpp
/* 自定义角色类 */
UCLASS()
class ACustomCharacter : public ACharacter
{
GENERATED_BODY()
}
/* 名称过长的类,比如ModMagnitudeCalculation */
UCLASS()
class UMMC_TestModify : public UGameplayModMagnitudeCalculation
{
GENERATED_BODY()
}
/* 数据表行结构体 */
USTRUCT()
struct FMyDataTableRow : public FTableRowBase
{
GENERATED_BODY()
}变量命名
- 每个单词的首字母大写
- bool类型变量要在变量名前加上b
- 尽量避免缩写,有缩写时需要写清晰的注释
cpp
/* bool变量 */
bool bIsWalking = false;
/* 其它变量 */
int32 ContainerNums = 0;
FVector2d Direction;函数命名
- 每个单词的首字母大写
- 命名要表现出该函数的用途
cpp
bool IsEmpty()
{
return false;
}
AbilitySystemComponent* GetAbilitySystemComponent()
{
return AbilitySystemComponent;
}委托命名
- 以
F开头 - 命名带有
On前缀或Delegate后缀
cpp
/* 使用On前缀 */
DECLARE_DELEGATE(FOnAttributeChanged)
/* 使用Delegate后缀 */
DECLARE_DELEGATE(FAttributeChangeDelegate)GameplayTag命名
- 每个单词首字母大写
- 标签要正确写明层级
cpp
UE_DECLARE_GAMEPLAY_TAG_EXTERN(TestCharacter);
/* 标签层级 */
UE_DEFINE_GAMEPLAY_TAG_COMMENT(
TestCharacter,
"EternalVU.Character.Type.TestCharacter",
"测试角色标签"
);蓝图命名
一般用蓝图资产的单词首字母做前缀,部分以BP_做前缀。见项目内资产命名。
代码写法
代码块
cpp
/* 大括号 */
void MyFunc()
{
}函数
参数
cpp
/* 无参数 */
void MyFunc1()
{
}
/* 参数 > 3 */
void MyFunc2(
int32 Param1,
int32 Param2,
int32 Param3,
int32 Param4
)
{
}虚函数重载
cpp
//.h
virtual void MyFunc3() override;
//.cpp
void MyFunc()
{
//根据需求调用
Super::MyFunc3();
}RepNotify函数
cpp
UPROPERTY(ReplicatedUsing = OnRep_Number)
int32 Number = 0;
void OnRep_Number()
{
}RPC函数
cpp
//.h
UFUNCTION(Server,Reliable)
void MyServerFunc()
{
}
UFUNCTION(Client,Reliable)
void MyClientFunc()
{
}
UFUNCTION(Multicast,Unreliable)
void MyMulticastFunc()
{
}
//.cpp
void MyServerFunc_Implementation()
{
}
void MyClientFunc_Implementation()
{
}
void MyMulticastFunc_Implementation()
{
}lambda表达式
cpp
/* lambda表达式 */
auto CallBack = []()
{
};
ASyncTask(ENamedThread::Type::AnyBackgroundThreadNormalTask,[]()
{
});