UE4蓝图与C++的交互

UE4是我到目前为止,接触过的最为复杂的技术,无论是深度还是广度。我们都喜欢简单,做人和做事都是一样,如果可以简单处理事情,就没有必要复杂。但事与愿违,现实中,我们不可能依靠自己单纯简单,就把事情做好。因为人与事的复杂,造成我们技术越来越来复杂。

从技术角度,很多人说C难,而Python简单。这是一个比较错误的观点。准确的说,应该是python比C的语法简单。python设计数据处理,与人工智能,本身不是其中一部分。回头再来说UE4为什么复杂。

因为UE4是一个功能非常全面的引擎,这不是他复杂的原因。只能说UE4公司首先目前的技术实力,只能采用如此复杂的方法,解决现有的事情。但我认为已经做得非常优秀了。而说他技术首先,只是因为没有更为简单的方式,让我们使用技术。比如微软的C#,UE4和C#完全不是一个复杂难度。

回到我们的重点,蓝图和C++这两个同时存在与UE4引擎的语言。但凡语言就有一个编辑器。所有UE4从语言编辑器就有两个。

1.UE4蓝图编辑器,用来编辑器蓝图和其他资源

蓝图编辑器

2.Microsoft Visual Studio用来编辑C++,其实说到C++,这个C++经过UE4改造以后,而非标准的C++,如果你觉得学了,C++标准语法就能玩转UE4的C++,恐怕不能实现。C++一门很复杂的语言,我个人建议要选择性学习,没有必要见到什么都要搞的很明白,不然会陷入语言细节中。

我们怎么来使用UE4的工程,我们新建一个UE4的C++工程以后,目录结构是这样:

工程目录

从这个目录中,我们可以看到两个文件,.sln,.uproject,这两个文件都是工程文件,sln编辑C++,而另一个编辑蓝图。


编辑器对照

一.蓝图调用C++代码,C++与蓝图的交互通过蓝图继承的。一个普通的C++是无法与蓝图交互的,我们需要通过下面这个类

用于交互的类

然后在C++代码里面定义函数:

#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);


};

然后在蓝图类里面继承这个类,然后重写函数PrintMessage.

image

以上过程就是蓝图调用C++代码过程,本质上通过继承实现。可能没有办法通过在蓝图中,直接定义C++类实现。

二.C++调用蓝图代码

void XXX::BeginPlay()
{
  TArray _TempArryActors;
  UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::GetClass(), _TempArryActors);
  for (int32 i = 0; i < _TempArryActors.Num(); i++)
  {
    if (_TempArryActors[i]->GetName() == FString("AMyMccActor"))
  {
   Cast(_TempArryActors[i])->PrintMessage(TEXT("找到Actor&调用PringMessage函数"));
  }
}

以上就是蓝图与C++交互的基本方法。C++本身语法已经比较复杂,在UE4中的C++也是被改造的。具体到底怎么用,还是看如何选择,对于没有功底的小白,还是UE4,给定的方法使用,会相对简单一些。

你可能感兴趣的:(UE4蓝图与C++的交互)