ED12.EdGraph|自定义Node/Pin外观
大约 1 分钟
需求
FGraphPanelNodeFactory
UEdGraphNode ——(NodeFactory)——> SGraphNode
数据节点 UI节点
UEdGraphNode= 编辑器数据节点(逻辑层)SGraphNode= 视觉层 Slate Widget(长什么样)FGraphPanelNodeFactory= 决定这个节点显示成什么样
流程
自定义 SGraphNode
class SComboGraphNode : public SGraphNode
{
public:
SLATE_BEGIN_ARGS(SComboGraphNode) {}
SLATE_END_ARGS()
void Construct(const FArguments& InArgs, UComboGraphEdNode* InNode)
{
this->GraphNode = InNode;
UpdateGraphNode();
}
virtual void UpdateGraphNode() override;
};
- 自定义标题
- 自定义背景颜色
- 自定义布局
- 添加图标
- 添加动画
- 添加额外信息
写之前介绍过的NodeFactory
struct XXX_API FComboNodeFactory : public FGraphPanelNodeFactory
{
virtual TSharedPtr<class SGraphNode> CreateNode(class UEdGraphNode* InNode) const override;
};
如果是你的战斗图节点 → 返回你的 UI 类 否则返回 nullptr(让其他 Factory 处理)
注册 Factory(非常关键)
TSharedPtr<FComboGraphNodeFactory> ComboNodeFactory;
void FComboGraphEditorModule::StartupModule()
{
ComboNodeFactory = MakeShareable(new FComboGraphNodeFactory());
FEdGraphUtilities::RegisterVisualNodeFactory(ComboNodeFactory);
}
注销:
void FComboGraphEditorModule::ShutdownModule()
{
if (ComboNodeFactory.IsValid())
{
FEdGraphUtilities::UnregisterVisualNodeFactory(ComboNodeFactory);
}
}

.png)
