要编写出优雅的Unreal Engine代码,需要了解所在sdk环境的编码习惯和约定,这样才能编写出和上层sdk一致的代码风格。
命名部分
函数名,变量名,类型名,首字母大写。eg:UPrimitiveComponent
类型名有一个额外的大写字母前缀。
模板类以T为前缀。eg:TArray
继承UObject的类以U为前缀。eg:UActorComponent
继承AAtor的类以A为前缀。eg:AMyActor
继承SWidget 的类以S为前缀。eg:SPage
抽象接口类以 I为前缀。eg:IGetName
大部分其他类都以F为前缀。eg:FString
3.变量如果是bool,则必须以b开头。eg:bFinished
4.返回bool的函数,必须是Is开头或Should开头。eg:IsVisable(),ShouldClearData()
5.函数的参数,如果需要修改,必须以Out开头。eg:void GetRoomInfo(FRoomInfo& OutRoomInfo);
6.类型名要与类型修饰符在一起。eg: AActor* player;
可移植数据类型部分
bool代表布尔值 (永远不要假设布尔值的大小) 。BOOL 将不会进行编译。
TCHAR 代表字符型(永远不要假设TCHAR的大小)。
uint8代表无符号字节(占1个字节)。
int8代表有符号的字节(占1个字节)。
uint16 代表无符号"短整型" (占2 个字节)。
int16代表有符号"短整型" (占2 个字节)。
uint32 代表无符号整型(占4字节)。
int32代表带符号整型(占4字节)。
uint64代表无符号"四字" (8个字节)。
int64 代表有符号"四字"(8个字节)。
float代表单精度浮点型 (占4 个字节)。
double代表双精度浮点型 (占8 个字节)。
PTRINT代表可以存放一个指针的整型 (永远不要假设PTRINT的大小)。
请不要在可移植代码中使用C++整型,因为需要根据编译器决定这种数据类型的大小。
C++11可以使用的特性
可变参数宏
auto
范围for
lambda
override final
其余禁止使用
C++ 枚举值(命名空间作用域)
在虚幻引擎的代码中我们一般会在枚举类型前面加上 "E"字符作为前缀。
我们要求所有枚举类型都使用命名空间来 (或空的结构体) 确定作用域。这样做的原因是在C++中枚举值的作用域和枚举类型本身的作用域一样。这样可能导致命名冲突,使得程序员必须创建奇怪的名称或者给枚举值加上前缀使它们的值保持唯一性。相反,我们通常会使用命名空间来规定新的枚举类型的作用范围。命名空间内的实际枚举类型的名称应该总是声明为 "Type" 。
通过命名空间确定枚举类型作用于的示例:
[代码]:
注意对于局部声明的枚举类型来说,您不能使用命名空间来规定作用范围。在这些情况中,我们选择声明一个没有成员变量的局部结构体,该结构体内仅有一个局部的枚举类型,使用该结构体来规定作用范围。
[代码]:
依赖部分
使用#pragma once来防止多次包含
字符串
使用unreal自带的FString,FText,TCHAR
容器
使用unreal自带的容器TArray,TMap,TSet
智能指针
使用unreal自带的智能指针TSharedPtr,TSharedRef,TWeakPtr