UEdGraph是虚幻引擎中的一种图形化编程工具,它是一种可视化的编程语言,类似于蓝图(Blueprint)。UEdGraph可以用于各种用途,包括游戏逻辑、人物控制、动画、特效、AI等等。
UEdGraph的主要作用是让程序员和设计师可以使用图形化的方式来描述程序逻辑或者游戏系统。相比传统的编程方式,使用UEdGraph可以更加直观地表达程序逻辑,降低了学习曲线和出错的概率。此外,UEdGraph也可以帮助程序员和设计师更加高效地协作,提高开发效率。
UEdGraph可以用在各种地方,包括:
游戏逻辑:使用UEdGraph可以快速构建游戏逻辑,例如关卡事件、任务流程、敌人AI等等。
人物控制:UEdGraph可以用于人物控制,例如移动、攻击、跳跃、动画等等。
动画:使用UEdGraph可以创建复杂的动画控制系统,例如骨骼动画、物理动画、状态机等等。
特效:UEdGraph可以用于创建各种特效,例如粒子系统、光影效果、音效等等。
第一步,创建一个创建一个最简单的图表编辑器
首先我们放在通过创建插件来创建图标编辑器,这也是为了能够更加方便让其他项目使用这个功能。
使用这个独立窗口能让我们看的更加的显眼。
在这里可以看到我们创建的独立窗口,然后打开就会发现:
这里的意思是说在LJTestGraph.cpp中的FLJTestGraphModule::OnSpawnPluginTab中添加代码来覆盖该窗口的内容
就和它的意思一样,我们来看看c++代码
然后我们在LJUedGraph.cpp中找到它说的地方
现在我们要开始创建其他的类,开始制作我们的图表编辑器。
第一步是:
新建c++类,其中我们要创建的类有三个,分别是:
以及
然后在创建的时候,要选择好位置:
一个是插件,一个是项目,我当然是要选择我的插件LJUedGraph里面
除了最后插件的Slate控件以外,其他的两个保持原样即可
可以看见,第一个是空白的【EdGraph】,之后3个是做插件后给你的基础模板,下一个是Schema的那个,最后的就是Slate控件。
然后简单解释一下这些东西:
UEdGraph代表的是一个图表对象,也就是说创建一个新的图表,那么我们就需要创建一个UedGraph.
UEdGraphSchema,它代表的东西不好说明,举个例子:
蓝图中的引脚,或者是右键寻找的哪些东西,都与UEdGraphSchema有关。
Slate控件,就是我们要将创建的图表对象和UEdGraphSchema放到这个里面,创建图表对象和创建图表编辑控件,然后再指定ui
如图:(代码在最后)【不要忘记头文件】
创建这两个对象之后,去cpp文件中实现。(代码在最后)【不要忘记头文件】
做好上面这些之后,我们来到一开始说的那个地方开始覆盖:
相比于之前一大堆东西,我们只需要将SNew里面的东西改成我们的slate控件即可。
头文件:
就是之前创建的那个slate控件
这样子一个简单空白的图表编辑器就可以创建成功了。
相关代码:
创建的时候记得将自己的类名字更改!
这个是slate的头文件:
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Widgets/SCompoundWidget.h"
#include "GraphEditor.h"
/**
*
*/
class LJUEDGRAPH_API SLJCompoundWidget : public SCompoundWidget
{
public:
SLATE_BEGIN_ARGS(SLJCompoundWidget)
{}
SLATE_END_ARGS()
/** Constructs this widget with InArgs */
void Construct(const FArguments& InArgs);
public:
//图表编辑器控件
TSharedPtr<SGraphEditor> GraphEditorP;
//图表对象
class UEdGraph_LinJohn* GraphOne;
};
这个是slate的cpp文件:
// Fill out your copyright notice in the Description page of Project Settings.
#include "SLJCompoundWidget.h"
#include "SlateOptMacros.h"
#include "MyEdGraphSchema.h"
#include "EdGraph_LinJohn.h"
BEGIN_SLATE_FUNCTION_BUILD_OPTIMIZATION
void SLJCompoundWidget::Construct(const FArguments& InArgs)
{
//创建图表对象
GraphOne = NewObject<UEdGraph_LinJohn>();
GraphOne->Schema = UMyEdGraphSchema::StaticClass();
GraphOne->AddToRoot();
//创建图表编辑器控件
GraphEditorP = SNew(SGraphEditor)
.GraphToEdit(GraphOne);
//指定这个控件的UI:
ChildSlot
[
GraphEditorP.ToSharedRef()
];
}
END_SLATE_FUNCTION_BUILD_OPTIMIZATION