애님그래프 커스텀 노드 (준비)

 추가해줄 모듈네임




헤더파일


// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "AnimGraphNode_Base.h"
#include "AnimGraphNode_Swimming.generated.h"

//실제 연산되는 런타임 구조체
USTRUCT(BlueprintType)
struct FAnimNode_Swimming : public FAnimNode_Base
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Links)
	FPoseLink BasePoseNode;

	//FAnimNode_Base interface
	// (메시 변경 등으로 인한)초기화/ 재초기화가 필요할 때 호출됨
	virtual void Initialize_AnyThread(const FAnimationInitializeContext& context) override;
	//노드에 의해 레퍼런스 된 본 인덱스들을 리프레시 하는 데 사용
	virtual void CacheBones_AnyThread(const FAnimationCacheBonesContext& context) override;
	//현재 상황 업데이트시에 호출됨(플레이 타임 증가나 블렌드 위젯 업데이트 등의 상황에서) 이 함수는 업데이트시 현재 노드의 DeltaTime과 blend weight를 가지고 있는 FAnimationUpdateContext를 입력받습니다.
	virtual void Update_AnyThread(const FAnimationUpdateContext& context) override;
	//‘포즈’를 만들어 내기 위해 호출됨(본 트랜스폼의 리스트
	virtual void Evaluate_AnyThread(FPoseContext& context) override;
	//"ShowDebug Animation"의 데이터를 디버깅시 사용
	virtual void GatherDebugData(FNodeDebugData& context) override;


	
};


// 시각적인 면과 함수성 처리 하는 에디터
UCLASS()
class SWIMMINGFISH_API UAnimGraphNode_Swimming : public UAnimGraphNode_Base
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, Category = "Settings")
	FAnimNode_Swimming Node;
	//제목 문구 배경 색
	virtual FLinearColor GetNodeTitleColor() const override;
	//
	virtual FText GetTooltipText() const override;
	virtual FText GetNodeTitle(ENodeTitleType::Type TitleType) const override;
	virtual FString GetNodeCategory() const override;

	
	
};


함수 파일


// Fill out your copyright notice in the Description page of Project Settings.


#include "AnimGraphNode_Swimming.h"
//텍스트현지화
#define LOCTEXT_NAMESPACE "A3Nodes"

void FAnimNode_Swimming::Initialize_AnyThread(const FAnimationInitializeContext& context)
{
	BasePoseNode.Initialize(context);
}

void FAnimNode_Swimming::CacheBones_AnyThread(const FAnimationCacheBonesContext& context)
{
	BasePoseNode.CacheBones(context);
}

void FAnimNode_Swimming::Update_AnyThread(const FAnimationUpdateContext& context)
{
	GetEvaluateGraphExposedInputs().Execute(context);
	BasePoseNode.Update(context);
}

void FAnimNode_Swimming::Evaluate_AnyThread(FPoseContext& context)
{
	BasePoseNode.Evaluate(context);
}

void FAnimNode_Swimming::GatherDebugData(FNodeDebugData& context)
{
	FString DebugLine = context.GetNodeName(this);

	context.AddDebugItem(DebugLine);
	BasePoseNode.GatherDebugData(context);
}


FLinearColor UAnimGraphNode_Swimming::GetNodeTitleColor() const
{
	return FLinearColor::Green;
}

FText UAnimGraphNode_Swimming::GetTooltipText() const
{
	//LOCTEXT(InKey, InTextLiteral)
	return LOCTEXT("My first CustomNode", "My first CustomNode");
}

FText UAnimGraphNode_Swimming::GetNodeTitle(ENodeTitleType::Type TitleType) const
{

	return LOCTEXT("SwimmingFish", "SwimmingFish");
}

FString UAnimGraphNode_Swimming::GetNodeCategory() const
{
	return TEXT("My Category");
}

댓글