用ai写了个UE5插件

文章目录

实际需求

这个需求来源于之前的一个项目,当时用了一个第三方插件,里边有一些绘制线段的代码,c++层用的是drawdebugline,当时看底层,觉得应该没问题,不应该在release上跑不起来,由于种种原因,没有时间去搞这块,后来丢给其他同事,也解决了,但是没有按照我的思路来。

最近在玩各种ai工具,觉得有点意思,就去解决点实际问题,就拿当时的问题练练手。

1.头文件

cpp 复制代码
#pragma once

#include "Kismet/BlueprintFunctionLibrary.h"
#include "RuntimeLineDrawer.generated.h"

UCLASS()
class YOURMODULE_API URuntimeLineDrawer : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

public:
    /** 在运行时(含Shipping)绘制一条线 */
    UFUNCTION(BlueprintCallable, Category="RuntimeDraw")
    static void DrawLineRuntime(
        UObject* WorldContextObject,
        FVector Start,
        FVector End,
        FLinearColor Color = FLinearColor::Red,
        float Thickness = 2.f,
        float LifeTime = 0.f,
        bool bDepthTest = true
    );
};

2.源文件

cpp 复制代码
#include "RuntimeLineDrawer.h"
#include "Engine/World.h"
#include "Engine/Engine.h"
#include "Components/LineBatchComponent.h"
#include "Engine/EngineTypes.h" // SDPG_World, SDPG_Foreground

void URuntimeLineDrawer::DrawLineRuntime(
    UObject* WorldContextObject,
    FVector Start,
    FVector End,
    FLinearColor Color,
    float Thickness,
    float LifeTime,
    bool bDepthTest
)
{
    if (!WorldContextObject) return;

    UWorld* World = WorldContextObject->GetWorld();
    if (!World) return;

    // 确保世界里有一个持久的 LineBatcher(发布版也可用)
    ULineBatchComponent* LineBatcher = World->PersistentLineBatcher;
    if (!LineBatcher)
    {
        LineBatcher = NewObject<ULineBatchComponent>(World);
        LineBatcher->RegisterComponentWithWorld(World);
        World->PersistentLineBatcher = LineBatcher;
    }

    // 构建一条线(FBatchedLine)
    // DepthPriority: 0=SDPG_World, 1=SDPG_Foreground
    const uint8 DepthPriority = bDepthTest ? (uint8)SDPG_World : (uint8)SDPG_Foreground;

    TArray<FBatchedLine> Lines;
    Lines.Emplace(Start, End, Color, Thickness, LifeTime, DepthPriority);

    LineBatcher->DrawLines(Lines);
    LineBatcher->MarkRenderStateDirty(); // 提示渲染更新
}

3.用法

cpp 复制代码
URuntimeLineDrawer::DrawLineRuntime(this, FVector(0,0,100), FVector(100,0,100),
                                    FLinearColor::Green, 3.f, /*LifeTime*/2.f, /*bDepthTest*/true);

小结

这只是个例子,完整的代码托管在完整代码,可以看下目录结构,如下:

vbnet 复制代码
YourProject/
└─ Plugins/
   └─ RuntimeLineDraw/
      ├─ RuntimeLineDraw.uplugin
      └─ Source/
         └─ RuntimeLineDraw/
            ├─ RuntimeLineDraw.Build.cs
            ├─ Public/
            │  └─ RuntimeLineDrawer.h
            └─ Private/
               ├─ RuntimeLineDrawer.cpp
               └─ RuntimeLineDrawModule.cpp

有兴趣可以去看看我这是以插件的形式给出的,具体,可以参考上图放到你自己的项目工程中。

相关推荐
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
Z1Jxxx8 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
zhangzhangkeji9 小时前
UE5 C++(14-1):UPROPERTY 宏、属性说明符和元数据说明符, visible,edit,Blueprint读写,Category 存储目录
ue5
️停云️9 小时前
【滑动窗口与双指针】不定长滑动窗口
c++·算法·leetcode·剪枝·哈希
charlie1145141919 小时前
嵌入式现代C++教程: 构造函数优化:初始化列表 vs 成员赋值
开发语言·c++·笔记·学习·嵌入式·现代c++
IT=>小脑虎9 小时前
C++零基础衔接进阶知识点【详解版】
开发语言·c++·学习
在路上看风景10 小时前
01. C++是如何工作的
开发语言·c++
码农小韩10 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
小L~~~10 小时前
绿盟校招C++研发工程师一面复盘
c++·面试