ED10.EdGraph|K2Node节点
大约 2 分钟
UEdGraphNode

UEdGraphNode|基础接口
UCLASS( )
class XXX_API UXXXNode : public UEdGraphNode
{
GENERATED_BODY()
public:
/*初始化时用到引脚*/
virtual void AllocateDefaultPins() override;
/*节点工具提示*/
virtual FText GetTooltipText() const override;
/*节点标题*/
virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;
/*颜色和图标*/
virtual FLinearColor GetNodeTitleColor() const override;
virtual FSlateIcon GetIconAndTint(FLinearColor& OutColor) const override;
};
UEdGraphNode|CreatePin
输入引脚
CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Execute);
输出引脚
UEdGraphPin* NewFloat = CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Float,UEdGraphSchema_K2::PN_Then);
这里有个小坑,按上面那种写法,引脚是黄的无法提升成变量,并且PinName直接用字符串会乱码。

UEdGraphPin* NewFloat = CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Real,UEdGraphSchema_K2::PC_Float, UEdGraphSchema_K2::PN_Then);
UEdGraphNode|AllocateDefaultPins
void UXXX::AllocateDefaultPins()
{
CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Execute);
CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Then);
Super::AllocateDefaultPins();
}
UEdGraphNode|GetMenuActions

void UXXX::GetMenuActions(FBlueprintActionDatabaseRegistrar& ActionRegistrar) const
{
Super::GetMenuActions(ActionRegistrar);
const UClass* ActionKey = GetClass();
if (ActionRegistrar.IsOpenForRegistration(ActionKey))
{
// 注册默认工厂
UBlueprintNodeSpawner* NodeSpawner = UBlueprintNodeSpawner::Create(GetClass());
check(NodeSpawner != nullptr);
ActionRegistrar.AddBlueprintAction(ActionKey, NodeSpawner);
}
}
UEdGraphNode|ReallocatePinsDuringReconstruction

void UK2Node_SuperComboGraphCharge::ReallocatePinsDuringReconstruction(TArray<UEdGraphPin*>& OldPins)
{
Super::ReallocatePinsDuringReconstruction(OldPins);
// 输出引脚
OutputPins.Empty();
// 重新创建 Exec 输入引脚
CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Execute);
for (const UEdGraphPin* OldPin : OldPins)
{
if (OldPin->Direction == EGPD_Output && UEdGraphSchema_K2::IsExecPin(*OldPin))
{
CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Exec,OldPin->PinName);
OutputPins.Add(OldPin->PinName);
}
}
}
