UE4藍(lán)圖與C++的交互

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)圖和其他資源

藍(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)圖。


編輯器對(duì)照

一.藍(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.

image

以上過程就是藍(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ì)簡單一些。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 6,328評(píng)論 0 10
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,124評(píng)論 1 3
  • 《稀缺》這本書,陳述的觀點(diǎn)新穎獨(dú)特。觀點(diǎn)在被作者自己各種推翻,又被各種重塑。 難免讓人摸不著頭腦。難免會(huì)暈菜,但真...
    白樺i閱讀 315評(píng)論 0 0
  • 山泰在大學(xué)想家了,但是回想一下,在家里也沒有多么好,山泰不要對(duì)自己虛構(gòu)的未來充滿幻想,只要好好地活在當(dāng)下,山泰內(nèi)心...
    想寫出好文筆的孩子閱讀 186評(píng)論 0 0
  • 這是連續(xù)30天堅(jiān)持每一天一篇原創(chuàng)文章了,30天說長不長,說短也不短了,其實(shí),世界上最難的事情是堅(jiān)持,哪怕是一件簡單...
    未來十年新零售閱讀 194評(píng)論 0 0

友情鏈接更多精彩內(nèi)容