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. 命名(如類型或變量)中的每個單詞需大寫首字母,單詞間通常無下划線。

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

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

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

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

    類型命名前綴規范如下:

    藍圖類別 前綴
    繼承自 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++代碼(函數、類等)時,出現注釋亂碼的情況。

錯誤處理規范


  • 不要使用C++異常機制(try,catch),UE4代碼默認是不支持的,推薦使用Assertions。
//example
int i=1;
verify(i==0);

具體UE4提供的斷言可查看:虛幻引擎4 官方文檔 | 斷言相關規范

參考


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM