UE4是我到目前為止,接觸過的最為復(fù)雜的技術(shù),無論是深度還是廣度。我們都喜歡簡單,做人和做事都是一樣,如果可以簡單處理事情,就沒有必要復(fù)雜。但事與愿違,現(xiàn)實(shí)中,我們不可能依靠自己單純簡單,就把事情做好。因?yàn)槿伺c事的復(fù)雜,造成我們技術(shù)越來越來復(fù)雜。
從技術(shù)角度,很多人說C難,而Python簡單。這是一個(gè)比較錯(cuò)誤的觀點(diǎn)。準(zhǔn)確的說,應(yīng)該是python比C的語法簡單。python設(shè)計(jì)數(shù)據(jù)處理,與人工智能,本身不是其中一部分?;仡^再來說UE4為什么復(fù)雜。
因?yàn)閁E4是一個(gè)功能非常全面的引擎,這不是他復(fù)雜的原因。只能說UE4公司首先目前的技術(shù)實(shí)力,只能采用如此復(fù)雜的方法,解決現(xiàn)有的事情。但我認(rèn)為已經(jīng)做得非常優(yōu)秀了。而說他技術(shù)首先,只是因?yàn)闆]有更為簡單的方式,讓我們使用技術(shù)。比如微軟的C#,UE4和C#完全不是一個(gè)復(fù)雜難度。
回到我們的重點(diǎn),藍(lán)圖和C++這兩個(gè)同時(shí)存在與UE4引擎的語言。但凡語言就有一個(gè)編輯器。所有UE4從語言編輯器就有兩個(gè)。
1.UE4藍(lán)圖編輯器,用來編輯器藍(lán)圖和其他資源

2.Microsoft Visual Studio用來編輯C++,其實(shí)說到C++,這個(gè)C++經(jīng)過UE4改造以后,而非標(biāo)準(zhǔn)的C++,如果你覺得學(xué)了,C++標(biāo)準(zhǔn)語法就能玩轉(zhuǎn)UE4的C++,恐怕不能實(shí)現(xiàn)。C++一門很復(fù)雜的語言,我個(gè)人建議要選擇性學(xué)習(xí),沒有必要見到什么都要搞的很明白,不然會(huì)陷入語言細(xì)節(jié)中。
我們怎么來使用UE4的工程,我們新建一個(gè)UE4的C++工程以后,目錄結(jié)構(gòu)是這樣:

從這個(gè)目錄中,我們可以看到兩個(gè)文件,.sln,.uproject,這兩個(gè)文件都是工程文件,sln編輯C++,而另一個(gè)編輯藍(lán)圖。

一.藍(lán)圖調(diào)用C++代碼,C++與藍(lán)圖的交互通過藍(lán)圖繼承的。一個(gè)普通的C++是無法與藍(lán)圖交互的,我們需要通過下面這個(gè)類

然后在C++代碼里面定義函數(shù):
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyMccActor.generated.h"
UCLASS()
class MYCPPPROJECT_API AMyMccActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyMccActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UFUNCTION(BlueprintImplementableEvent, Category = "SplineMesh")
void PrintMessage(const FString &Message);
};
然后在藍(lán)圖類里面繼承這個(gè)類,然后重寫函數(shù)PrintMessage.

以上過程就是藍(lán)圖調(diào)用C++代碼過程,本質(zhì)上通過繼承實(shí)現(xiàn)??赡軟]有辦法通過在藍(lán)圖中,直接定義C++類實(shí)現(xiàn)。
二.C++調(diào)用藍(lán)圖代碼
void XXX::BeginPlay()
{
TArray<AActor*> _TempArryActors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::GetClass(), _TempArryActors);
for (int32 i = 0; i < _TempArryActors.Num(); i++)
{
if (_TempArryActors[i]->GetName() == FString("AMyMccActor"))
{
Cast<AMySplineMeshActor>(_TempArryActors[i])->PrintMessage(TEXT("找到Actor&調(diào)用PringMessage函數(shù)"));
}
}
以上就是藍(lán)圖與C++交互的基本方法。C++本身語法已經(jīng)比較復(fù)雜,在UE4中的C++也是被改造的。具體到底怎么用,還是看如何選擇,對(duì)于沒有功底的小白,還是UE4,給定的方法使用,會(huì)相對(duì)簡單一些。