在Unreal Wiki上有一系列進入UE4 C++的文章,其中有一個專題非常有用。標題也很有意思。我們開始UE4 C++之路吧
1.那么怎么入手學習UE4 C++呢?
以前我們都是從PlayerController,pawn,Camera開始虛幻之路的,方法其實是傳承下來的Wiki建議大家從PlayerController或是Blueprint擴展開始。
①Hello怎么world呢?
ClientMessage("Hello world!");
很簡答不是嗎
2.搞不清. 和->
有時候我們能看到代碼中有兩種指向. 和-> what the hell is this mean?
->表示該變量是一個數據指向哪里的指針。FVector* LocationPtr; 指針
.表示變量時實際的值。例如 Fvector location; location.X=5;就是直接訪問值
LocationPtr=&Location; //Location這個變量的地址設置成指針LocationPtr;
LocationPtr->X返回的就是5啦
再用上面學到的知識來將其輸出
ClientMessage(FString::SanitizeFloat(LocationPtr->X));
瞧是不是很簡單:)
總結一下:當你有一個實際的變量就使用.,就像unrealscript和Java等語言中的做法一樣。
當你事用指針的時候,你不確定他是否已經指向了某件東西,你必須得檢測一下
if(!LocationPtr)return; //那就返回他,因為他沒有指向任何東西
如果向前面設置的那樣
LocationPtr=&location;
LocationPtr->X; //這個指針就是這樣訪問他的變量的
3.::這是什么鬼玩意?
這告訴我們一個函數或是變量的域名空間的范圍
UUnrealEdEngine::Init
這告訴我們這是類UUnrealEdEngine的初始化函數
Super::Init(InEngineLoop)
因為上面引擎的Init是虛函數,你必須得訪問他的父類函數
倘若你寫了兩個類AMyTree和AMyFlower.兩個類都有一個獲取位置的函數
FVector GetLocation() const;
為什么要引入域名空間::這種超級麻煩的東西?因為C++過於底層。你有權利獲取Global域名空間,如果在一個類外你僅僅是聲明了一個變量或者函數或者結構
static const FVector MyGlobalVector=FVector(2,4,16);
FORCEINLINE void MyVeryGlobalFunction();
{
//處理...
}
那么這些符合將會進入所有域名空間並且被所有讀取認識,這對C++的operators非常有用,例如你定義的+,-,*除等運算符。
但是對於你定義的那些小類,例如AMyTree和AMyFlower將會引起麻煩,如果你不使用::將會讓編譯器困惑是哪個GetLocation,所以你使用::來告訴編譯器
FVector AMyFlower::GetLocation()const
{
//code...
}
FVector AMyTree::GetLocation()const
{
//code..
}
因此如果你不使用域名空間,你講不得不再你的代碼中每一個函數的命名都將是唯一的,如果你沒有好的記憶和管理方法,估計這很難做到。
最后你只需要知道::就是一個簡單的標簽,告訴你這個函數或是變量屬於哪個類的。