在 Unreal Engine 5(UE5)中,UBlueprintFunctionLibrary 是一个用于在蓝图中暴露 C++ 静态函数的工具类。通过继承此类,开发者可以创建全局可访问的工具函数,让蓝图和 C++ 共享逻辑。以下是详细说明和代码示例:
创建一个继承自 UBlueprintFunctionLibrary 的子类,并添加静态函数:
// MyBlueprintFunctionLibrary.h
#pragma once
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"
UCLASS()
class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
// 示例:将两个向量相加
UFUNCTION(BlueprintCallable, Category = "MyLibrary|Math")
static FVector AddVectors(const FVector& A, const FVector& B);
};
// MyBlueprintFunctionLibrary.cpp
#include "MyBlueprintFunctionLibrary.h"
FVector UMyBlueprintFunctionLibrary::AddVectors(const FVector& A, const FVector& B)
{
return A + B;
}
// 带执行引脚(输入/输出)的函数
UFUNCTION(BlueprintCallable, Category = "MyLibrary|Flow", meta = (ExpandEnumAsExecs = "Result"))
static void CheckHealth(float Health, EMyResult& Result);
// 纯函数(无执行流程,仅计算)
UFUNCTION(BlueprintCallable, BlueprintPure, Category = "MyLibrary|Math")
static bool IsHealthLow(float Health);
UFUNCTION(BlueprintCallable, Category = "MyLibrary|Debug")
static void LogMessage(FString Message, FColor Color = FColor::White);
// 示例:检测角色是否在视野内
UFUNCTION(BlueprintCallable, Category = "MyLibrary|AI")
static bool IsActorVisible(AActor* Target, AActor* Viewer, float MaxDistance = 1000.0f);
bool UMyBlueprintFunctionLibrary::IsActorVisible(AActor* Target, AActor* Viewer, float MaxDistance)
{
if (!Target || !Viewer) return false;
FVector ViewerLocation = Viewer->GetActorLocation();
FVector TargetLocation = Target->GetActorLocation();
// 距离检测
if (FVector::Distance(ViewerLocation, TargetLocation) > MaxDistance) return false;
// 视线检测
FHitResult HitResult;
FCollisionQueryParams Params;
Params.AddIgnoredActor(Viewer);
GetWorld()->LineTraceSingleByChannel(
HitResult,
ViewerLocation,
TargetLocation,
ECC_Visibility,
Params
);
return HitResult.GetActor() == Target;
}
通过 UBlueprintFunctionLibrary,开发者可以高效地打通 C++ 与蓝图之间的逻辑,提升项目的可维护性和开发效率。