虛幻4,從入門到放棄(一)

謹(jǐn)以此記錄自己學(xué)習(xí)UE4(C++)的路程劫映。

虛幻4提供了兩種方法創(chuàng)建游戲性元素:C++和藍(lán)圖可視化腳本。這里著重記錄C++編程刹前。廢話不多說泳赋,開始虛幻旅程...

在開始之前必須先知道UE4的相關(guān)類:

Object :UE中所有類的基類,不能添加到游戲當(dāng)中喇喉,不能生成祖今、放到關(guān)卡中,用于生成函數(shù)拣技,數(shù)據(jù)千诬,藍(lán)圖中無法使用。

Actor:游戲性對象过咬,支持三維變換大渤,比如平移,旋轉(zhuǎn)和縮放變換掸绞,可以有一個或者多個組件泵三,可以被放置在場景中也可以動態(tài)生成。Actor 可以通過游戲代碼(C++或藍(lán)圖)來創(chuàng)建(Spawn)及銷毀衔掸。在 C++ 中烫幕,AActor 是所有 Actor 的基類。

Components : 組件敞映,Actor的一部分较曼,特殊類型的對象。在Actor中添加組件時振愿,就是在拼湊Actor的零碎部分捷犹。就像,汽車上的車輪冕末,方向盤等都可以看做組件萍歉,這些組件組成了汽車Actor。

Pawn : 玩家在游戲中的物理顯示档桃,可以被玩家支配的角色枪孩,也可以是AI控制的角色,例如NPC。

Character : 控制器蔑舞,它可以控制一個Pawn(或Pawn的子類拒担,比如Character)來掌控它的動作。人類玩家使用PlayerControllers來控制 Pawn攻询,而AIControllers實現(xiàn)了它們所控制的Pawn的人工智能从撼。控制器使用 Possess 函數(shù)控制Pawn,使用 Unpossess 函數(shù)放棄控制Pawn蜕窿。

PlayerController : 玩家控制器谋逻,玩家通過PlayController來控制Pawn

AIController : 類似于PlayerController,區(qū)別是由AI控制

GameMode : 像游戲規(guī)則及獲勝條件這樣的內(nèi)容桐经,游戲過程中不會有太多的數(shù)據(jù)改變

PlayerState : 玩家的游戲狀態(tài)

GameState : 游戲狀態(tài)

相關(guān)類先記錄這么多,更多的在之后過程中逐步探索浙滤,接下來開始創(chuàng)建一個C++類:

1.點擊 New Project(新建項目) 選項卡阴挣,然后選擇 C++ 選項卡。 在該處選擇 Basic Code(基礎(chǔ)代碼)纺腊,點擊 Create Project(創(chuàng)建項目)畔咧。

2.在Unreal Editor(虛幻編輯器),使用Add Code to Project 創(chuàng)建新的C++類揖膜。

3.此時將會打開選擇父類菜單誓沸。 Actor 是能夠存在于 Unreal Engine(虛幻引擎) 層面的最為基礎(chǔ)的類,選擇將 Actor 類作為基類壹粟,并且命名拜隧,這里命名為FloatingActor。

4.在 Visual Studio 中找到剛才新建的的C++文件趁仙,會看到兩個文件洪添,F(xiàn)loatingActor.h,F(xiàn)loatingActor.cpp 這兩個文件就不用多說了雀费。

5.在新建的兩個C++文件中添加如下代碼:
FloatingActor.h

#pragma once
#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"
UCLASS()
class QUICKSTART_API AFloatingActor : public AActor{               
  GENERATED_BODY()
public:
    // 設(shè)置此actor屬性的默認(rèn)值    
  AFloatingActor();   
 // 當(dāng)游戲開始或生成時調(diào)用    
  virtual void BeginPlay() override;   
 // 在每一幀調(diào)用   
  virtual void Tick( float DeltaSeconds ) override;   
  float RunningTime;
};

FloatingActor.cpp

#include "QuickStart.h"
#include "FloatingActor.h"

// 設(shè)置默認(rèn)值
AFloatingActor::AFloatingActor()
{
    // 將此actor設(shè)置為在每一幀都調(diào)用Tick()干奢。  如果您不需要這項功能,您可以關(guān)閉它以改善性能盏袄。
    PrimaryActorTick.bCanEverTick = true;

}

// 當(dāng)游戲開始或生成時調(diào)用
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();
}

// 在每一幀調(diào)用
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );
    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;      //把高度以20的系數(shù)進(jìn)行縮放
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}
  1. 在 虛幻編輯器 中忿峻,找到 Content Browser(內(nèi)容瀏覽器),并展開名稱為"C++類"的文件夾辕羽、 在該文件夾中逛尚,有一個包含了 Actor 類的 FloatingActor 的"QuickStart"文件夾。

  2. 我們可以直接把 FloatingActor 類拖曳到 Level Editor(關(guān)卡編輯器) 窗口來創(chuàng)建世界中 FloatingActor 的實例逛漫。 我們會在 Level Editor(關(guān)卡編輯器)World Outliner(世界大綱視圖) 中選擇它黑低,它在其中的名稱為 "FloatingActor1"。 它的 Components(組件)和其它屬性可以在 Details(詳細(xì)信息) 面板中看到。

  3. FloatingActor 應(yīng)該在游戲中可見克握。 在選擇了它后蕾管,我們可以在 Details Panel(詳細(xì)信息面板) 中點擊 Add Component(添加組件) ,然后選擇 Cone(椎體) 從而賦予它簡單的可視化表現(xiàn)菩暗。

  4. 現(xiàn)在自定義的 Actor 已經(jīng)完成了掰曾,讓我們把它移動到明顯的位置。 我們可以用鼠標(biāo)左鍵在世界中選擇并拖曳內(nèi)容停团,或者我們也可以手動來移動它旷坦。 如需手動移動,我們可以在 Level Editor(關(guān)卡編輯器)World Outliner(世界大綱視圖) 中選擇它佑稠,然后使用 Details Panel(詳細(xì)信息面板) 來選擇"FloatingActor1 (實例)"秒梅。 我們現(xiàn)在可以直接編輯FloatingActor1的 Transform(變換)Location(位置)域了。 讓我們把X設(shè)置為-200舌胶,把Z設(shè)置為200捆蜀。這樣我們就可以在場景中的桌子上放置"FloatingActor1"了。

  1. 按下 Play(播放) 按鈕幔嫂,然后觀看椎體的上下浮動辆它!

注:資料來源于http://api.unrealengine.com/CHN/Programming/QuickStart/4/index.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市履恩,隨后出現(xiàn)的幾起案子锰茉,更是在濱河造成了極大的恐慌,老刑警劉巖切心,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件飒筑,死亡現(xiàn)場離奇詭異,居然都是意外死亡昙衅,警方通過查閱死者的電腦和手機扬霜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來而涉,“玉大人著瓶,你說我怎么就攤上這事√湎兀” “怎么了材原?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長季眷。 經(jīng)常有香客問我余蟹,道長,這世上最難降的妖魔是什么子刮? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任威酒,我火速辦了婚禮窑睁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘葵孤。我一直安慰自己担钮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布尤仍。 她就那樣靜靜地躺著箫津,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宰啦。 梳的紋絲不亂的頭發(fā)上苏遥,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音赡模,去河邊找鬼田炭。 笑死,一個胖子當(dāng)著我的面吹牛漓柑,可吹牛的內(nèi)容都是我干的诫肠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼欺缘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挤安?” 一聲冷哼從身側(cè)響起谚殊,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛤铜,沒想到半個月后嫩絮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡围肥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年剿干,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆刻。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡置尔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氢伟,到底是詐尸還是另有隱情榜轿,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布朵锣,位于F島的核電站谬盐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诚些。R本人自食惡果不足惜飞傀,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砸烦,春花似錦弃鸦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雪隧,卻和暖如春西轩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脑沿。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工藕畔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庄拇。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓注服,卻偏偏與公主長得像,于是被迫代替她去往敵國和親措近。 傳聞我的和親對象是個殘疾皇子溶弟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容