UE4自定义资源和编辑器(三):添加图表页签

简介

GraphTab是编辑器可以创建节点和编辑节点的页签(Tab),如蓝图编辑器、行为树编辑器和动画蓝图编辑器中的图表。我们的目标是实现类似动画状态机这样的图表,也是我们主要参考引擎代码的地方。
状态机图表
文件结构如下:
图表类

创建图表相关类

StateMachineGraph表示页签中的图表对象,继承自UEdGraph。该类需要在StateMachine资源类中进行保存。

  • StateMachineGraph.h
UCLASS(MinimalAPI)
class UStateMachineGraph : public UEdGraph
{
   
	GENERATED_BODY()
};
  • StateMachine.h
UPROPERTY()
UEdGraph* StateMachineGraph;

GraphSchema表示当前图表操作的所有逻辑,比如创建节点、右键空白处、连线等。这里空白处右键点击菜单中只添加了一个操作(SchemaAction),创建一个State节点。

  • StateMachineGraphSchema.h
UCLASS(MinimalAPI)
class UStateMachineGraphSchema : public UEdGraphSchema
{
   
	GENERATED_BODY()

private:
	// 空白处右键的生成的菜单
	virtual void GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const override;
};
#define LOCTEXT_NAMESPACE "StateMachineGraphSchema"

void UStateMachineGraphSchema::GetGraphContextActions(FGraphContextMenuBuilder& ContextMenuBuilder) const
{
   
	// Add action
	FText Category = LOCTEXT("AddStateMachine", "Add State Node");
	FText MenuDesc = LOCTEXT("MenuDesc", "State");
	FText ToolTip = LOCTEXT("StateToolTip", "A State Node");
	TSharedPtr<FEdGraphSchemaAction_CreateStateNode> NewStateNode(new FEdGraphSchemaAction_CreateStateNode(Category, MenuDesc, ToolTip, 0));
	ContextMenuBuilder.AddAction(NewStateNode);
}

#undef LOCTEXT_NAMESPACE

添加GraphSchemaAction类

SchemaAction类表示在菜单中选中点击这个Action会发生什么事情,如蓝图编辑器中通常是点击一个Action,创建对应的函数节点。这里是点击后创建一个State节点。

// 这个类表示执行这个Actoin会发生什么事情,比如创建一个节点
USTRUCT()
struct  FEdGraphSchemaAction_CreateStateNode : public FEdGraphSchemaAction
{
   
	GENERATED_BODY()

	FEdGraphSchemaAction_CreateStateNode() {
   };

	FEdGraphSchemaAction_CreateStateNode(FText InNodeCategory, FText InMenuDesc, FText InToolTip, const int32 InGrouping)
		: FEdGraphSchemaAction(MoveTemp(InNodeCategory), MoveTemp(InMenuDesc), MoveTemp(InToolTip), InGrouping)
	{
   }

	// 点击Act
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值