用ai寫了個UE5插件

文章目錄

  • 實際需求
    • 1.頭文件
    • 2.源文件
    • 3.用法
  • 小結

實際需求

這個需求來源于之前的一個項目,當時用了一個第三方插件,里邊有一些繪制線段的代碼,c++層用的是drawdebugline,當時看底層,覺得應該沒問題,不應該在release上跑不起來,由于種種原因,沒有時間去搞這塊,后來丟給其他同事,也解決了,但是沒有按照我的思路來。

最近在玩各種ai工具,覺得有點意思,就去解決點實際問題,就拿當時的問題練練手。

1.頭文件

#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.源文件

#include "RuntimeLineDrawer.h"
#include "Engine/World.h"
#include "Engine/Engine.h"
#include "Components/LineBatchComponent.h"
#include "Engine/EngineTypes.h" // SDPG_World, SDPG_Foregroundvoid 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_Foregroundconst 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.用法

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

小結

這只是個例子,完整的代碼托管在完整代碼,可以看下目錄結構,如下:

YourProject/
└─ Plugins/└─ RuntimeLineDraw/├─ RuntimeLineDraw.uplugin└─ Source/└─ RuntimeLineDraw/├─ RuntimeLineDraw.Build.cs├─ Public/│  └─ RuntimeLineDrawer.h└─ Private/├─ RuntimeLineDrawer.cpp└─ RuntimeLineDrawModule.cpp

有興趣可以去看看我這是以插件的形式給出的,具體,可以參考上圖放到你自己的項目工程中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98007.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98007.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98007.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習從入門到精通 - 強化學習初探:Q-Learning到Deep Q-Network實戰

機器學習從入門到精通 - 強化學習初探&#xff1a;從 Q-Learning 到 Deep Q-Network 實戰 一、開場白&#xff1a;推開強化學習這扇門 不知道你有沒有過這種感覺 —— 盯著一個復雜的系統&#xff0c;既想讓它達到某個目標&#xff0c;又苦于無法用傳統規則去精確描述每一步該怎…

【OpenHarmony文件管理子系統】文件訪問接口解析

OpenHarmony文件訪問接口&#xff08;filemanagement_file_api&#xff09; 概述 OpenHarmony文件訪問接口&#xff08;filemanagement_file_api&#xff09;是開源鴻蒙操作系統中的核心文件系統接口&#xff0c;為應用程序提供了完整的文件IO操作能力。該項目基于Node-API&…

云手機運行是否消耗自身流量?

云手機運行是否消耗自身流量&#xff0c;取決于具體的使用場景和設置&#xff1a;若用戶在連接云手機時&#xff0c;使用的是家中Wi-Fi、辦公室局域網等非移動數據網絡&#xff0c;那么在云手機運行過程中&#xff0c;基本不會消耗用戶自身的移動數據流量&#xff0c;在家中連接…

JavaSe之多線程

一、多線程基本了解 1、多線程基本知識 1.進程:進入到內存中執行的應用程序 2.線程:內存和CPU之間開通的通道->進程中的一個執行單元 3.線程作用:負責當前進程中程序的運行.一個進程中至少有一個線程,一個進程還可以有多個線程,這樣的應用程序就稱之為多線程程序 4.簡單理解…

產品月報|睿本云8月產品功能迭代

睿本云8月更新已陸續上線&#xff01; 睿本云8月產品月報&#xff0c;點擊查收&#x1f447;小程序支付成功彈窗廣告、企業會員增加卡券銷售和卡券退貨模塊、工廠端可批量新增多門店訂貨單、門店端和工廠端新增“極速訂貨”、商品調撥業務支持自定義多種流程配置等功能迭代更新…

融云:當我們談論 AI 重構業務時,我們到底在談論什么

所有業務都值得用 AI 重新做一次。 這句話正在從一句鼓舞人心的口號&#xff0c;演變為一場無人可避的商業現實。AI 帶來的結構性機會&#xff0c;意味著企業有機會從根本上重構成本、效率與體驗的曲線。但這一切最終都要回到一個無比務實的問題上&#xff1a; AI 究竟如何在我…

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1異常

org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1異常問題解決一、問題背景二、錯誤現象三、原因分析核心問題&#xff1a;字符集不匹配四、解決過程試錯路徑記錄五、最終方案1.創建launch.json文件&#xff0c;修改VSCode…

【C語言】深入理解指針(5)

目錄 sizeof和strlen 1.sizeof 2.strlen 3. sizeof 和 strlen 的對比 sizeof和strlen 1.sizeof sizeo正名&#xff1a;sizeof是操作符&#xff0c;不是函數&#xff0c;sizeof是操作符&#xff0c;括號內如果有計算不會進行計算sizeof 是操作符&#xff0c;用于計算變量所…

動態代理設計模式

JDK動態代理實現 動態代理利用了JDK API,動態地在內存中構建代理對象,從而實現對目標對象的代理功能.動態代理又被稱為JDK代理或接口代理. 靜態代理與動態代理的區別: 靜態代理在編譯時就已經實現了,編譯完成后代理類是一個實際的class文 動態代理是在運行時動態生成的,即編譯…

《Html泛型魔法學院:用霍格沃茨風格網頁教授集合框架》

一、項目概述 這個創意教學網頁&#xff0c;將Java泛型與集合框架知識融入霍格沃茨魔法世界主題。通過沉浸式UI設計和交互式代碼練習&#xff0c;讓抽象的技術概念變得生動有趣。主要技術棧包括&#xff1a; HTML5語義化結構Tailwind CSS框架Font Awesome圖標庫純JavaScript交…

學習PaddlePaddle--環境配置-PyCharm + Conda?

第一階段&#xff1a;安裝與配置 Python 和 Conda?? 雖然 PyCharm 可以管理環境&#xff0c;但我們先獨立準備好 Conda 環境&#xff0c;這樣更清晰可靠。 ??1. 安裝 Miniconda (Python 環境管理)?? 1. ??下載??&#xff1a; ? 訪問 Miniconda 官網。 ? 選擇 ??M…

【數據庫】Sql Server數據庫中isnull、iif、case when三種方式的使用和空值判斷

大家好&#xff0c;我是全棧小5&#xff0c;歡迎來到《小5講堂》。 這是《Sql Server》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解。 溫馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不對之處望指正&#xff01; 目錄前言ISNULL用法c…

【藍橋杯選拔賽真題64】C++最大空白區 第十四屆藍橋杯青少年創意編程大賽 算法思維 C++編程選拔賽真題解

C++最大空白區 第十四屆藍橋杯青少年創意編程大賽C++選拔賽真題 博主推薦 所有考級比賽學習相關資料合集【推薦收藏】 1、C++專欄 電子學會C++一級歷年真題解析 電子學會C++二級歷年真題解析

試用Augment編寫python腳本實現智能家居3D環境交互響應

環境配置 VS Code中直接安裝Augment擴展&#xff0c;然后郵箱登錄就能獲得7天的試用。 從如下位置安裝3D建模軟件Blender&#xff1a; https://www.blendercn.org/downloadme#xiazai Blender 是一款免費開源的 3D 創作套件。它支持整個三維流程&#xff1a;建模、綁定、動畫…

【架構師干貨】系統架構設計

1. 軟件架構概述 從需求分析到軟件設計之間的過渡過程稱為軟件架構。只要軟件架構設計好了&#xff0c;整個軟件就不會出現坍塌性的錯誤&#xff0c;即不會崩潰。 架構設計就是需求分配&#xff0c;將滿足需求的職責分配到組件上。 軟件架構為軟件系統提供了一個結構、行為和屬…

Java設計模式之結構型—享元模式

Java中最常用的設計模式-CSDN博客 把“不可變且可復用”的細粒度對象緩存起來&#xff0c;用“共享”代替“新建”&#xff0c;從而節省內存。 經典場景 字符串常量池、Integer.valueOf(-128~127)、Android Message.obtain() 游戲粒子、編輯器字形、地圖瓦片、線程池中的任務…

cursor+python輕松實現電腦監控

小伙伴們&#xff0c;今天我們利用cursor不寫一行代碼開發一個電腦的系統狀態監控小應用&#xff01;下載安裝cursor&#xff1a;網址&#xff1a;https://www.cursor.com/cn下載后雙擊安裝輸入提示詞&#xff1a; 制作一個winswos應用&#xff0c;實現顯示時間精確到秒&…

信號調制與解調 matlab仿真

信號調制與解調 matlab仿真 原始信號--頻譜為cos(Wt*w)函數&#xff0c;外形如饅頭調制解調傅里葉變換測試FT的頻譜是否為鋸齒波理想低通濾波器,截至頻率Wm傅里葉變換頻譜為鋸齒波函數的時域信號函數傅里葉變換調制頻率1理想低通濾波調制頻率2理想低通濾波 % 調制定理演示Dem…

IIS服務器下做瀏覽器緩存

你的這個問題問得非常好&#xff0c;很多開發者在同時使用重寫和緩存時都會遇到。簡單來說&#xff1a;你添加的 <staticContent> 和 <clientCache> 配置本身不會影響或干擾 重寫規則的工作。它們各司其職&#xff0c;在 IIS 處理請求的不同階段發揮作用。 但是&a…

Flutter 3.35.2 以上版本中 數字轉字符串的方法指南

在 Flutter 3.35.2 (對應 Dart 2.19 及以上版本) 中&#xff0c;將數字轉換為字符串主要依賴于 Dart 語言本身提供的原生方法。這些方法穩定且向后兼容。下面我為你介紹幾種主要的方法和案例。 &#x1f522; 數字轉字符串的基本方法方法名適用類型描述常用場景toString()int, …