寫在前面
Actor是可以放進地圖的最基本類,這裡主要是介紹一下Actor的使用。
一、空間坐标系
1. Actor的變換操作
- Actor的變換變換操作主要包括四個部分:
- 位置;
- 旋轉;
- 縮放;
- 上面三者都是對應三個軸進行變換;
- 紅色代表前(X軸),繞X軸旋轉是Roll;
- 綠色代表右(Y軸),繞Y軸旋轉是Pitch;
- 藍色代表上(Z軸),繞Z軸旋轉是Yaw;
- 移動性;
- 有三個可選項;
- 靜态:遊戲過程中Actor不可移動,屬性也不可以更改;
- 固定:遊戲過程中Actor不可移動,但可以更改它的一些屬性;
- 可移動:遊戲過程中Actor可以移動;
- 可以參考部落格:UE4 Actor移動性以及光源移動性類型;
- 地圖中的每一個機關代表1厘米;
2. 世界坐标系和局部坐标系
- (1) 在Editor中點選地圖上面的的小按鈕可以切換世界坐标系和局部坐标系;
- 兩個坐标系對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作為繼承的父類;
- 頭檔案中已經預設定義了三個函數:
- 預設的構造函數;
-
函數:當Actor在遊戲中建立完執行個體後就會執行的内容;BeginPlay()
-
函數:Actor在遊戲中的每一幀都會執行的内容;Tick()
-
檔案中也已經預設實作了三個函數,如下:.cpp
三、實作功能
- 在頭檔案中增加若幹成員變量,如下:
- 一些注意的點如下:
-
是挂載的元件,說明符雖然是UStaticMeshComponent
,但實際上在Editor細節面闆上該變量下仍可以自由設定屬性,以改變物體的形狀;VisibleAnywhere
- 帶Visible說明符的屬性在Editor面闆上是類似于隻讀類型,不希望使用者通過Editor直接修改值的屬性均設定為Visible說明符;
-
說明符是在Editor中給變量以滑鼠懸停提示,預設是變量上方的注釋内容,當然也可以顯式設定,中文注釋可能會出現亂碼;ToolTip
- 在聲明變量時不要設定初值,而是在構造函數中設定初值;
-
- 在
檔案中實作具體内容,如下:.cpp
- 一些注意的點如下:
- 雖然變量在構造函數中進行了初始化,但設定了Edit說明符的變量的初始值仍然會改變,在Editor的細節面闆上修改的值會直接覆寫C++中的初始值,優先級順序大概是:C++類初始值 -> 藍圖類(若用C++類建立藍圖類)的藍圖面闆中的設定值 [Default級] -> 主面闆的執行個體細節面闆中的設定值 [Instance級];
- 所有變量都應該進行初始化;
- 調試代碼時可以嘗試用輸出到螢幕的方式;
四、在Editor中使用
- 直接拖動
類到地圖中可以生成執行個體;FloatActor
- 當然也可以先用
生成對應的藍圖類,然後再将藍圖類拖到地圖中以生成執行個體;FloatActor
- 為執行個體設定基本的形狀和材質,否則當遊戲開始時是看不到的;
- 注意移動性應當設定為可移動,因為C++中設定了移動的功能;
- 在細節面闆中搜尋
分組,可以看到自定義的Float Variables
的成員變量,如下:AFloatActor
- 最後點選播放即可,如果勾選了
,這個正方體就會沿水準面漂浮移動;Should Float
- 播放時,按
可以将滑鼠退出遊戲界面;Shift + F1