謹(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);
}
在 虛幻編輯器 中忿峻,找到 Content Browser(內(nèi)容瀏覽器),并展開名稱為"C++類"的文件夾辕羽、 在該文件夾中逛尚,有一個包含了 Actor 類的 FloatingActor 的"QuickStart"文件夾。
我們可以直接把 FloatingActor 類拖曳到 Level Editor(關(guān)卡編輯器) 窗口來創(chuàng)建世界中 FloatingActor 的實例逛漫。 我們會在 Level Editor(關(guān)卡編輯器) 和 World Outliner(世界大綱視圖) 中選擇它黑低,它在其中的名稱為 "FloatingActor1"。 它的 Components(組件)和其它屬性可以在 Details(詳細(xì)信息) 面板中看到。
FloatingActor 應(yīng)該在游戲中可見克握。 在選擇了它后蕾管,我們可以在 Details Panel(詳細(xì)信息面板) 中點擊 Add Component(添加組件) ,然后選擇 Cone(椎體) 從而賦予它簡單的可視化表現(xiàn)菩暗。
現(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"了。
- 按下 Play(播放) 按鈕幔嫂,然后觀看椎體的上下浮動辆它!
注:資料來源于http://api.unrealengine.com/CHN/Programming/QuickStart/4/index.html