創(chuàng)建一個(gè)工程項(xiàng)目,創(chuàng)建一個(gè)K2Node類(生成節(jié)點(diǎn)),創(chuàng)建一個(gè)藍(lán)圖函數(shù)庫(kù)(實(shí)現(xiàn)節(jié)點(diǎn)內(nèi)功能)
項(xiàng)目.Build.cs內(nèi)添加模塊
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class NewCoustNode : ModuleRules
{
public NewCoustNode(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });
PrivateDependencyModuleNames.AddRange(new string[] { "BlueprintGraph","UnrealEd","GraphEditor","KismetCompiler" });
// Uncomment if you are using Slate UI
// PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
// Uncomment if you are using online features
// PrivateDependencyModuleNames.Add("OnlineSubsystem");
// To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
}
}
K2Node.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "K2Node.h"
#include "MyNode.generated.h"
/**
*
*/
UCLASS()
class NEWCOUSTNODE_API UMyNode : public UK2Node
{
GENERATED_BODY()
public:
// //鼠標(biāo)放到上面的說(shuō)明/注釋
// virtual FText GetTooltipText()const override;
// //節(jié)點(diǎn)名稱
// virtual FText GetNodeTitle(ENodeTitleType::Type TitleType)const override;
// //將節(jié)點(diǎn)添加到藍(lán)圖視圖
// virtual void GetMenuActions(FBlueprintActionDatabaseRegistrar& ActionRegister)const override;
// //藍(lán)圖節(jié)點(diǎn)的標(biāo)簽
// virtual FText GetMenuCategory()const;
// //展開(kāi)節(jié)點(diǎn)
// virtual void ExpandNode(FKismetCompilerContext& CompilerContext, UEdGraph* SourceGraph)override;
// //分配默認(rèn)引腳
// virtual void AllocateDefaultPins()override;
// //引腳更改時(shí)會(huì)調(diào)用
// virtual void PinDefaultValueChanged(UEdGraphPin* ChangedPin)override;
// //連接情況更改以后
// virtual void NotifyPinConnectionListChanged(UEdGraphPin* Pin)override;
//
// //創(chuàng)建一個(gè)可視小部件來(lái)在圖形編輯器或圖形面板中表示這個(gè)節(jié)點(diǎn)。如果沒(méi)有實(shí)現(xiàn),則將使用默認(rèn)的節(jié)點(diǎn)工廠
// virtual TSharedPtr<SGraphNode> CreateVisualWidget() { return TSharedPtr<SGraphNode>(); }
// // 為表示此節(jié)點(diǎn)的小部件創(chuàng)建背景圖像
// virtual TSharedPtr<SWidget> CreateNodeImage() const { return TSharedPtr<SWidget>(); }
// //右鍵菜單, 比如添加RemovePin
// virtual void GetNodeContextMenuActions(class UToolMenu* Menu, class UGraphNodeContextMenuContext* Context) const override;
//鼠標(biāo)放到上面的說(shuō)明/注釋
virtual FText GetTooltipText() const override { return FText::FromString(TEXT("This node is used for everyone to learn")); }
//節(jié)點(diǎn)名稱
virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override { return FText::FromString(TEXT("My Node")); }
//藍(lán)圖節(jié)點(diǎn)的標(biāo)簽
virtual FText GetMenuCategory() const { return FText::FromString(TEXT("This is My ClassMenu")); }
//重寫(xiě)UK2Node的GetMenuActions函數(shù),使其可以在右鍵菜單里找到這個(gè)藍(lán)圖節(jié)點(diǎn)
virtual void GetMenuActions(FBlueprintActionDatabaseRegistrar& ActionRegistrar) const override;
//分配默認(rèn)引腳
virtual void AllocateDefaultPins() override;
//節(jié)點(diǎn)調(diào)用函數(shù)
virtual void ExpandNode(FKismetCompilerContext& CompilerContext, UEdGraph* SourceGraph)override;
};
K2Node.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "NewCoustNode/Public/MyNode.h"
#include "BlueprintActionDatabaseRegistrar.h"
#include "BlueprintNodeSpawner.h"
#include "K2Node_CallFunction.h"
#include "KismetCompiler.h"
#include "MyBlueprintFunctionLibrary.h"
//通用,可以固定格式
void UMyNode::GetMenuActions(FBlueprintActionDatabaseRegistrar& ActionRegistrar) const
{
Super::GetMenuActions(ActionRegistrar);
UClass* ActionKey = GetClass();
//ActionRegistrar需要include
if (ActionRegistrar.IsOpenForRegistration(ActionKey))
{
//UBlueprintNodeSpawner需要include
UBlueprintNodeSpawner* NodeSpawner = UBlueprintNodeSpawner::Create(GetClass());
check(NodeSpawner != nullptr);
ActionRegistrar.AddBlueprintAction(ActionKey, NodeSpawner);
}
}
void UMyNode::AllocateDefaultPins()
{
Super::AllocateDefaultPins();
//創(chuàng)建輸入引腳
CreatePin(EGPD_Input, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Execute);
//創(chuàng)建輸出引腳01
UEdGraphPin* staring = CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Then);
staring->PinFriendlyName = FText::FromString("staring");
//創(chuàng)建輸出引腳02
UEdGraphPin* Finished = CreatePin(EGPD_Output, UEdGraphSchema_K2::PC_Exec, UEdGraphSchema_K2::PN_Then);
Finished->PinFriendlyName = FText::FromString("finished");
}
void UMyNode::ExpandNode(FKismetCompilerContext& CompilerContext, UEdGraph* SourceGraph)
{
Super::ExpandNode(CompilerContext, SourceGraph);
UEdGraphPin* ExecPin = GetExecPin();
UEdGraphPin* ThenPin = GetThenPin();
if (ExecPin && ThenPin) {
// 調(diào)用一個(gè)BlueprintFunctionLibrary節(jié)點(diǎn),需要include "UMyBlueprintFunctionLibrary"
FName MyFunctionName = GET_FUNCTION_NAME_CHECKED(UMyBlueprintFunctionLibrary, starting);
//UK2Node_CallFunction需要include,CompilerContext需要include并且模塊內(nèi)要添加"BlueprintGraph","UnrealEd","GraphEditor","KismetCompiler"
UK2Node_CallFunction* CallFuncNode = CompilerContext.SpawnIntermediateNode<UK2Node_CallFunction>(this,SourceGraph);
CallFuncNode->FunctionReference.SetExternalMember(MyFunctionName, UMyBlueprintFunctionLibrary::StaticClass());
CallFuncNode->AllocateDefaultPins();
CompilerContext.MovePinLinksToIntermediate(*ExecPin, *(CallFuncNode->GetExecPin()));
FName MyFunctionName01 = GET_FUNCTION_NAME_CHECKED(UMyBlueprintFunctionLibrary, Finished);
UK2Node_CallFunction* CallFuncNode01 = CompilerContext.SpawnIntermediateNode<UK2Node_CallFunction>(this,SourceGraph);
CallFuncNode01->FunctionReference.SetExternalMember(MyFunctionName01, UMyBlueprintFunctionLibrary::StaticClass());
CallFuncNode01->AllocateDefaultPins();
CompilerContext.MovePinLinksToIntermediate(*ExecPin, *(CallFuncNode01->GetExecPin()));
// move pins
CompilerContext.MovePinLinksToIntermediate(*ThenPin, *(CallFuncNode->GetThenPin()));
CompilerContext.MovePinLinksToIntermediate(*ThenPin, *(CallFuncNode01->GetThenPin()));
}
}
BlueprintFunctionLibrary.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"
/**
*
*/
UCLASS()
class NEWCOUSTNODE_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static void starting();
UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"))
static void Finished();
};
BlueprintFunctionLibrary.cpp文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-604193.html
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyBlueprintFunctionLibrary.h"
void UMyBlueprintFunctionLibrary::starting()
{
if (GEngine) {
const int32 AlwaysAddKey = -1;
GEngine->AddOnScreenDebugMessage(AlwaysAddKey,
5.0f,
FColor::Purple,
TEXT("starting...")
);
}
}
void UMyBlueprintFunctionLibrary::Finished()
{
if (GEngine) {
const int32 AlwaysAddKey = -1;
GEngine->AddOnScreenDebugMessage(AlwaysAddKey,
5.0f,
FColor::Red,
TEXT("finished...")
);
}
}
這是簡(jiǎn)單定制藍(lán)圖節(jié)點(diǎn)的實(shí)現(xiàn)過(guò)程文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604193.html
到了這里,關(guān)于UE5 自定義藍(lán)圖節(jié)點(diǎn)(記錄,備忘)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!