Week3¶
本节课的主要内容是C++的代码规范。代码规范的目的是让自己和他人都使用同一种代码规范,阅读时更加便利,使得代码维护和多人协作都更加容易。
C++代码规范¶
- 命名:使用下划线和无歧义的单词来进行变量命名。
- 格式: 四空格缩进,适当换行。
- 书写:直白易懂,在关键逻辑添加注释。
UE中的C++代码规范¶
命名¶
清晰明确,避免过度缩写;大驼峰式,bool类型需加b前缀。
数据类型¶
使用合适的数据类型,减少不必要的内存占用。使用uint64/int16等基础类型;使用UE定义的数据类型,如FString、FName等;避免使用stl容器,而是使用UE提供的容器:TArray、TMap等。(如果使用stl容器,可能导致一定的内存分配问题)
风格¶
大括号换行,if-else对齐(都使用大括号),使用Tab缩进,switch-case的case缩进。
命名空间¶
使用命名空间,避免全局变量。UnrealHeaderTool仅支持全局命名空间的类型;不要在全局命名空间使用using声明;一些宏在命名空间内可能失效,可以尝试UE_前缀的版本。
标识符¶
Metadata Specifiers,使用UPROPERTY()、UFUNCTION()等宏来标识属性和函数,以便UE编辑器识别。格式为:标头(标识符,meta=(key,key="value",...))。
UPROPERTY()¶
- UPROPERTY():用于声明属性,如EditAnywhere、BlueprintReadWrite等。
- 可以进一步使用Category来实现分类。
- Display Name可以用于显示名称,从而可以在编辑器显示中文名称
- Display Priority可以用于设置显示顺序。
- Advanced Display可以默认收起属性。
- Clamp Min/Max可以用于设置属性的最大最小值。
- ToolTip可以用于设置属性的提示信息。
- Blueprint Read Only和Blueprint Write Only可以用于设置蓝图中的读写权限。
- Blueprint Getter和Blueprint Setter可以用于设置蓝图中的Get和Set函数。
- BlueprintAssignable和BlueprintCallable可以用于设置蓝图中的可调用性。
UFUNCTION()¶
UFUNCTION():用于声明函数。
UCLASS()¶
UCLASS():用于声明类。
需要注意的是,UPROPERTY()、UFUNCTION()、UCLASS()等宏都需要在类的声明中使用,而不是在定义中使用。而且头文件引入部分的最后需要添加类似于#include "MyClass.generated.h"
的内容。
UCLASS()还要在类的声明中添加GENERATED_BODY()
。
USTRUCT()¶
USTRUCT():用于声明结构体,如BlueprintType、Blueprintable等。USTRUCT()也需要使用GENERATED_BODY()
。
UENUM()¶
UENUM():用于声明枚举。建议使用enum class,而不是enum。
作业¶
本节课没有作业。