類型
int8?/ uint8 :8位有符號(hào)/無符號(hào)整數(shù)
int16/ uint16 :16位有符號(hào)/無符號(hào)整數(shù)
int32/ uint32 :32位有符號(hào)/無符號(hào)整數(shù)
int64/? uint64 :64位有符號(hào)/無符號(hào)整數(shù)
字符串:String Handling
auto關(guān)鍵字不會(huì)自動(dòng)為您指定指針/引用,需要自己添加
容器:
TArray:類似于std :: vector
TMap
TSet
更多容器參考Containers
迭代器:TObjectIterator
UE4類
類的前綴:
從Actor派生的類以A為前綴(例如,AController)
從Object派生的類以U為前綴(例如,UComponent)
枚舉前綴為E(例如,EFortificationType)
接口類通常以I為前綴(例如,IAbilitySystemInterface)
模板類以T為前綴(例如,TArray)
從SWidget(Slate UI)派生的類以S為前綴(例如,SButton)
其他所有內(nèi)容都以字母F為前綴(例如,F(xiàn)Vector)
宏:
帶參數(shù)的宏定義可以看做是函數(shù)?
UCLASS():用于告訴Unreal為類生成反射數(shù)據(jù)。 該類必須派生自UObject。
說明符:Class Specifiers
UCLASS([specifier, specifier, ...], [meta(key=value, key=value, key, key, ...)])
USTRUCT():用于告訴Unreal為結(jié)構(gòu)生成反射數(shù)據(jù)。
說明符:Struct Specifiers
UPROPERTY():修飾UCLASS或USTRUCT的成員變量。
說明符:Property Specifiers
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])Type VariableName;
eg:


UFUNCTION():允許將UCLASS或USTRUCT的類方法用作UFUNCTION。
Function Specifiers:參考文檔? ? ? ? ? ??
UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)])
ReturnType FunctionName([Parameter, Parameter, ...])
UENUM():用于告訴Unreal為枚舉生成反射數(shù)據(jù)。
GENERATED_BODY():
在反射的類或結(jié)構(gòu)中需要GENERATED_UCLASS_BODY()/ GENERATED_USTRUCT_BODY()宏,將附加函數(shù)和typedef注入到類體中。
Unreal Property System:
反射是程序在運(yùn)行時(shí)檢查自身的能力。
?C++本身并不支持任何形式的反射
變量在動(dòng)態(tài)生成時(shí)需要使用宏才支持垃圾收集
Actor通常不會(huì)被垃圾收集,需要調(diào)用Destroy()
USTRUCT從FGCObject派生并覆蓋其AddReferencedObjects函數(shù)才能垃圾收集
基礎(chǔ)類:
默認(rèn)情況下,UObjects和AActors都有基本的內(nèi)存管理,包括垃圾收集。
大多數(shù)游戲玩法開發(fā)不涉及直接從UObjects派生,而是從AActor和UActorComponent派生。
每個(gè)Actor或UObject對(duì)象都是一個(gè)類的單個(gè)實(shí)例。每個(gè)Actor實(shí)例都獲得其自己的組件唯一實(shí)例。
?UObject
虛幻引擎中的基礎(chǔ)構(gòu)建塊稱為UObject。 這個(gè)類與UClass一起提供了引擎中許多最重要的基本服務(wù):
1.垃圾收集
2.屬性的可配置值
3.對(duì)屬性和方法的網(wǎng)絡(luò)支持
?AActor
包含Component對(duì)象的容器。例如,汽車上的輪子,方向盤,汽車車身,車燈等都將被視為組件,而汽車本身就是演員。
Actor可以訪問并使用Component提供的功能。
AActor是所有Actors的基類。?AActor派生自UObject。
在將AActor放置在某個(gè)級(jí)別之前,該AActor必須至少包含一個(gè)USceneComponent,其中包含該AActor的平移,旋轉(zhuǎn)和比例。
1.可放置在世界中的物體
2.充當(dāng)層次結(jié)構(gòu)的組件容器
3.網(wǎng)絡(luò)中可以復(fù)制的基本類型
Pawn:Pawn不被假定為人形。
在多個(gè)Pawn切換可以參考Possessing Pawns in Blueprint
Character:是一個(gè)人形風(fēng)格的Pawn。(Pawn的派生類)比Pawn多了1個(gè)CharacterMovementComponent,CapsuleComponent和SkeletalMeshComponent
UWorld :: SpawnActor()專門用于產(chǎn)生AActor,自動(dòng)調(diào)用BeginPlay和Tick
Destroy()會(huì)調(diào)用EndPlay
BeginPlay?- 當(dāng)對(duì)象首次進(jìn)入游戲存在時(shí)調(diào)用
Tick?- 每幀調(diào)用一次以便隨著時(shí)間的推移完成工作
EndPlay?- 當(dāng)對(duì)象離開游戲區(qū)域時(shí)調(diào)用
?UActorComponent
必須是AActor的父級(jí),組件只能附加到一個(gè)父組件或Actor,但它可能有許多子組件附加到自身,形成一個(gè)樹。
UActorComponents有自己的行為,通常負(fù)責(zé)在許多類型的AActors之間共享的功能。
actor中的子組件相對(duì)于其父組件或Actor具有位置,旋轉(zhuǎn)和縮放。
1.提供可視網(wǎng)格
2.粒子效應(yīng)
3.相機(jī)視角
4.物理互動(dòng)
5.運(yùn)動(dòng)邏輯
?UStruct
不必從任何特定類擴(kuò)展為使用UStruct。 您只需要使用USTRUCT()標(biāo)記結(jié)構(gòu)。
UStructs不是垃圾收集的。 如果創(chuàng)建它們的動(dòng)態(tài)實(shí)例,則必須自己管理它們的生命周期。
Game Mode和Game State管理游戲運(yùn)行的相關(guān)信息。

Game Instance:用于存儲(chǔ)程序運(yùn)行時(shí)需要持久保存的信息。 不會(huì)在關(guān)卡加載之后被刪除。

Game Mode負(fù)責(zé)制定游戲規(guī)則,例如玩家人數(shù),進(jìn)入游戲的方式,暫停游戲,level的轉(zhuǎn)換。
AGameModeBase——》AGameMode(查看文檔)
游戲模式只存在于服務(wù)器上,因此本地客戶端無法訪問模式實(shí)例。如果玩家需要與當(dāng)前游戲模式相關(guān)的更新信息,則該信息可以存儲(chǔ)在AGameStateBaseActor 保持同步(RPC)。
在藍(lán)圖中設(shè)置游戲模式
1.創(chuàng)建GameMode藍(lán)圖并為其設(shè)置(類)默認(rèn)值
2.為游戲分配默認(rèn)游戲模式
編輯——》項(xiàng)目設(shè)置——》地圖和模式
默認(rèn)GameMode下拉框指定要使用的GameMode
GameMode:游戲規(guī)構(gòu)成了游戲模式。只存在于服務(wù)器上。絕對(duì)不應(yīng)該有客戶需要了解的瞬態(tài)數(shù)據(jù)。
1.新建以Game Mode Base為基類的藍(lán)圖
AGameModeBase的派生類AGameMode實(shí)現(xiàn)了匹配狀態(tài)的概念,因此更適合標(biāo)準(zhǔn)游戲類型,如多人射擊游戲。
2.打開并設(shè)置Classes選項(xiàng)卡中的默認(rèn)類

3.設(shè)置默認(rèn)的游戲模式


4.覆蓋默認(rèn)的游戲模式

在編輯器的右側(cè)

GameState:
當(dāng)游戲中發(fā)生與規(guī)則相關(guān)的事件并需要跟蹤并與所有玩家共享時(shí),該信息將通過GameState進(jìn)行存儲(chǔ)和同步,例如排行榜。
GameState存在于服務(wù)器和所有客戶端上,可以自由復(fù)制以使所有計(jì)算機(jī)保持最新狀態(tài)。
PlayerState:
參與者的狀態(tài)(例如玩家姓名和分?jǐn)?shù))
作為游戲的一部分存在的非玩家AI將不具有PlayerState
所有玩家的PlayerStates都存在于所有機(jī)器上(與PlayerControllers不同),并且可以自由復(fù)制以保持同步。