天天看點

Unreal Engine06:Actor的實作

寫在前面

Actor是可以放進地圖的最基本類,這裡主要是介紹一下Actor的使用。

一、空間坐标系

1. Actor的變換操作

  • Actor的變換變換操作主要包括四個部分:
    • 位置;
    • 旋轉;
    • 縮放;
      • 上面三者都是對應三個軸進行變換;
      • 紅色代表前(X軸),繞X軸旋轉是Roll;
      • 綠色代表右(Y軸),繞Y軸旋轉是Pitch;
      • 藍色代表上(Z軸),繞Z軸旋轉是Yaw;
    • 移動性;
      • 有三個可選項;
      • 靜态:遊戲過程中Actor不可移動,屬性也不可以更改;
      • 固定:遊戲過程中Actor不可移動,但可以更改它的一些屬性;
      • 可移動:遊戲過程中Actor可以移動;
      • 可以參考部落格:UE4 Actor移動性以及光源移動性類型;
  • 地圖中的每一個機關代表1厘米;

2. 世界坐标系和局部坐标系

  • (1) 在Editor中點選地圖上面的的小按鈕可以切換世界坐标系和局部坐标系;
Unreal Engine06:Actor的實作
  • 兩個坐标系對Actor變換影響如下:
    • 對于位移變換和縮放變換,兩個坐标系均無影響;
    • 對于旋轉變換而言,旋轉的發生均參照世界坐标系,對世界坐标系無影響,但對局部坐标系有影響,局部坐标系相當于是跟着物體在旋轉,始終與物體保持最初的相對位置;
  • (2) 在代碼中也可以使用兩種坐标系;
  • 使用局部坐标系也就是将變換的視角代入Actor本身,操作是相對于Actor而言的,是常用的寫法,例如:
AddActorLocalOffset(FVector(1, 0, 0));
AddActorLocalRotation(FRotator(1, 0, 0));
           
  • 使用世界坐标系也就是用上帝視角進行Actor的變換,X軸、Y軸和Z軸永遠不變且唯一,這種用法比較少,一般是用來和地圖上的其他東西對齊,例如:
AddActorWorldOffset(FVector(1, 0, 0));
AddActorWorldRotation(FRotator(1, 0, 0));
           

二、建立一個Actor的C++類

  • 建立的C++類也是放在Source檔案夾中的Public和Private檔案夾中;
  • 選擇Actor作為繼承的父類;
  • 頭檔案中已經預設定義了三個函數:
    • 預設的構造函數;
    • BeginPlay()

      函數:當Actor在遊戲中建立完執行個體後就會執行的内容;
    • Tick()

      函數:Actor在遊戲中的每一幀都會執行的内容;
Unreal Engine06:Actor的實作
  • .cpp

    檔案中也已經預設實作了三個函數,如下:
Unreal Engine06:Actor的實作

三、實作功能

  • 在頭檔案中增加若幹成員變量,如下:
Unreal Engine06:Actor的實作
  • 一些注意的點如下:
    • UStaticMeshComponent

      是挂載的元件,說明符雖然是

      VisibleAnywhere

      ,但實際上在Editor細節面闆上該變量下仍可以自由設定屬性,以改變物體的形狀;
    • 帶Visible說明符的屬性在Editor面闆上是類似于隻讀類型,不希望使用者通過Editor直接修改值的屬性均設定為Visible說明符;
    • ToolTip

      說明符是在Editor中給變量以滑鼠懸停提示,預設是變量上方的注釋内容,當然也可以顯式設定,中文注釋可能會出現亂碼;
    • 在聲明變量時不要設定初值,而是在構造函數中設定初值;
  • .cpp

    檔案中實作具體内容,如下:
Unreal Engine06:Actor的實作
Unreal Engine06:Actor的實作
  • 一些注意的點如下:
    • 雖然變量在構造函數中進行了初始化,但設定了Edit說明符的變量的初始值仍然會改變,在Editor的細節面闆上修改的值會直接覆寫C++中的初始值,優先級順序大概是:C++類初始值 -> 藍圖類(若用C++類建立藍圖類)的藍圖面闆中的設定值 [Default級] -> 主面闆的執行個體細節面闆中的設定值 [Instance級];
    • 所有變量都應該進行初始化;
    • 調試代碼時可以嘗試用輸出到螢幕的方式;

四、在Editor中使用

  • 直接拖動

    FloatActor

    類到地圖中可以生成執行個體;
  • 當然也可以先用

    FloatActor

    生成對應的藍圖類,然後再将藍圖類拖到地圖中以生成執行個體;
Unreal Engine06:Actor的實作
  • 為執行個體設定基本的形狀和材質,否則當遊戲開始時是看不到的;
  • 注意移動性應當設定為可移動,因為C++中設定了移動的功能;
  • 在細節面闆中搜尋

    Float Variables

    分組,可以看到自定義的

    AFloatActor

    的成員變量,如下:
Unreal Engine06:Actor的實作
  • 最後點選播放即可,如果勾選了

    Should Float

    ,這個正方體就會沿水準面漂浮移動;
  • 播放時,按

    Shift + F1

    可以将滑鼠退出遊戲界面;

繼續閱讀