Aery的UE4 C++遊戲開發之旅(2)編碼規範

C++基礎類型規範


因爲PC、XBOX、PS4等各平臺的C++基礎類型大小可能不一樣(實際上絕大部分都是整型類型的大小不一樣),所以UE4提供了以下可移植基礎類型的別名來統一規範類型大小:函數

  • 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尺寸)。
  1. 當須要明確基礎類型尺寸大小(例如須要序列化等功能),應使用可移植的類型。
  2. 若是代碼中的整型類型大小不是很重要,可直接使用C++的 int 和無符號 int 類型(不一樣的平臺上的大小可能不一樣),典型的例子是用於循環的整型變量i。

我的認爲,若是想更簡單明瞭地選擇類型的話,那麼建議在類/結構體的聲明部分(變量/函數返回值/函數參數等)使用可移植類型,而函數實現裏出現的某些可有可無的臨時變量(例如循環體的整型變量i)則能夠直接使用C++基礎類型。工具

UCLASS()
class MYPROJECT_API USomething: public UObject{
    UPROPERTY()
    int32 ID;

    UFUNCTION()
    uint32 GetValue();
};

uint32 USomething::GetValue(){
    uint32 value = 0;
    for(int i = 0; i < vec.size(); ++i){
        value += vec[i];
    }
    return value;
}

命名規範


  1. 命名(如類型或變量)中的每一個單詞需大寫首字母,單詞間一般無下劃線。ui

    例如:Health 和 UPrimitiveComponent,而非 lastMouseCoordinates 或 delta_coordinates。編碼

  2. bool變量必須以b爲前綴(例如 bPendingDestruction 或 bHasFadedIn)。指針

  3. 類型名前綴需使用額外的大寫字母,用於區分其和變量命名。code

    例如:FSkin 爲類型名,而 Skin 則是 FSkin 的實例。htm

    類型命名前綴規範以下:blog

    藍圖類別 前綴
    繼承自 UObject U
    繼承自 AActor A
    繼承自 SWidget S
    抽象界面類的前綴 I
    枚舉類的前綴 E
    模板類 T

    其餘多數類均以F爲前綴,而部分子系統則以其餘字母爲前綴。繼承

    模板實例化的Typedef再也不是模板,並應加上相應前綴,例如:typedef TArray<FMytype> FArrayOfMyTypes;

  4. 藍圖命名:"BP"+類別縮寫+"_"+名字

    例如: BPA_Player

    藍圖類別 前綴
    藍圖Actor BPA_
    藍圖結構 BPS_
    藍圖枚舉 BPE_
    藍圖接口 BPI_
    藍圖函數庫 BFL_
    藍圖宏庫 BML_

頭文件規範


  • 確保本身include的頭文件不要放在 "XXX.generated.h" 文件下面,由於Unreal Header Tool編譯工具默認這個文件就是頭文件列表的最後一行了。

字符串規範


  • 在字符串字面量周圍使用 TEXT() 宏:若未使用,在文字中構建 FStrings 的代碼將致使不理想的字符轉換過程。
"Hello World!";         //Not so well

TEXT("Hello World!");   //OK

字符集規範


  • 應將C++代碼文件都保存爲utf8格式:不然可能會出如今UE4藍圖中調用C++代碼(函數、類等)時,出現註釋亂碼的狀況。

參考


系列其餘文章:Aery的UE4 C++開發之旅系列文章

相關文章
相關標籤/搜索