Skip to content

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。

作业

本节课没有作业。