1:瞧,這是UE4 C++


  在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..

  }

  因此如果你不使用域名空間,你講不得不再你的代碼中每一個函數的命名都將是唯一的,如果你沒有好的記憶和管理方法,估計這很難做到。

  最后你只需要知道::就是一個簡單的標簽,告訴你這個函數或是變量屬於哪個類的。

  

  

  

  

 


免責聲明!

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



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