UE5 C++ SplineMesh的蓝图函数库实现方法
UAAABlueprintFunctionLibrary
UAAABlueprintFunctionLibrary.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Components/SplineComponent.h"
#include "Components/SplineMeshComponent.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "AAABlueprintFunctionLibrary.generated.h"
/**
*
*/
UENUM(BlueprintType)
enum class EMyEnum:uint8
{
KeepRelativeTransform UMETA(DisplayName = "KeepRelativeTransform"),
KeepWorldTransform UMETA(DisplayName = "KeepWorldTransform"),
};
UCLASS()
class SPLINECPP_API UAAABlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable,Category = "Move SplineMesh")
static void CanSplineMeshMovAble(USplineComponent* Spline01,USplineComponent* Spline02,UStaticMesh* SplineStaticMesh,ESplineMeshAxis::Type ForwardAxis,ESplineCoordinateSpace::Type Scapse,bool Movable,EMyEnum MyEnumParam);
static void abc();
private:
static TArray<USplineMeshComponent*> BBB;
};
UAAABlueprintFunctionLibrary.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "AAABlueprintFunctionLibrary.h"
#include <filesystem>
TArray<USplineMeshComponent*> UAAABlueprintFunctionLibrary::BBB;
void UAAABlueprintFunctionLibrary::CanSplineMeshMovAble(USplineComponent* Spline01, USplineComponent* Spline02,
UStaticMesh* SplineStaticMesh, ESplineMeshAxis::Type ForwardAxis, ESplineCoordinateSpace::Type Scapse,bool Movable,EMyEnum MyEnumParam)
{
abc();
if (!Spline01)
{
return;
}
Spline01->RegisterComponent();
int32 Point = Spline01->GetNumberOfSplinePoints();
if (Point<2)
{
return;
}
for (int32 i = 0; i<Point-1; i++)
{
FVector startlocation,startTangent,Endlocation,EndTangent;
Spline01->GetLocationAndTangentAtSplinePoint(i,startlocation,startTangent,Scapse);
Spline01->GetLocationAndTangentAtSplinePoint(i+1,Endlocation,EndTangent,Scapse);
USplineMeshComponent* SplineMesh = NewObject<USplineMeshComponent>(Spline01);
SplineMesh->SetMobility(EComponentMobility::Movable);
SplineMesh->SetStaticMesh(SplineStaticMesh);
SplineMesh->SetForwardAxis(ForwardAxis);
SplineMesh->SetStartAndEnd(startlocation,startTangent,Endlocation,EndTangent);
switch (MyEnumParam)
{
case EMyEnum::KeepRelativeTransform:
SplineMesh->AttachToComponent(Spline01,FAttachmentTransformRules::KeepRelativeTransform);
break;
case EMyEnum::KeepWorldTransform:
SplineMesh->AttachToComponent(Spline01,FAttachmentTransformRules::KeepWorldTransform);
break;
default:
break;
}
SplineMesh->RegisterComponent();
BBB.Add(SplineMesh);
}
}
void UAAABlueprintFunctionLibrary::abc()
{
//GEngine->AddOnScreenDebugMessage(-1,0.5f,FColor::Red,FString::Printf("%s"),BBB.GetTypeSize(),true);
}