首页
/
每日頭條
/
科技
/
ue5如何添加材質裡的元素
ue5如何添加材質裡的元素
更新时间:2026-06-21 06:22:39
目标:UE5在runtime下現實加載PNG,JPG等圖片資源

先看效果:

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)1

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)2

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)3

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)4

步驟1. 創建UE5工程

新建UE5的C 空白項目TestPicturePro,記得選擇C ,初學者包可以根據自己需要選擇是否勾選。

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)5

步驟2. 創建空白插件,命名為SimplePictureTools

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)6

插件創建成功後可以看到如下目錄:

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)7

步驟3. 創建的藍圖靜态方法類

C 文件夾下右擊,創建C 類

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)8

選擇藍圖靜态方法類,點擊下一步

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)9

修改文件文件夾路徑,我們這裡修改到新創建的插件文件夾下

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)10

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)11

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)12

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)13

技巧:選擇公共的話,UE會把頭文件放到public文件夾下面,cpp文件放到Private文件夾下面,如果選擇私有的話,UE會把頭文件 cpp文件都放到Private文件夾下面。

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)14

同樣創建成功後會出現

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)15

步驟4. 在SimplePictureToolsLibrary.h定義LoadImageToTexture2D方法

public: UFUNCTION(BlueprintCallable, Category="Picture Tool") static bool LoadImageToTexture2D(const FString& ImagePath, UTexture2D* &InTexture, float& Width, float& Height);

據說UTexture2D是一個指針,我們需要把他傳到藍圖中,所以需要添加引用&InTexture

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)16

在LoadImageToTexture2D方法中添加用于:取出ImagePath文件的二進制數據的代碼

// 取出ImagePath文件的二進制數據 TArray<uint8> ImageResultData; FFileHelper::LoadFileToArray(ImageResultData,*ImagePath);

加載圖片處理模塊

// 加載圖片處理模塊 // 使用模塊管理器的帶有檢測功能的模塊加載方法LoadModuleChecked IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>("ImageWrapper");

找到runtime下的ImageWrapper模塊的方法如下:

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)17

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)18

模塊名

并且要在TestPicturePro.Build.cs中添加模塊ImageWrapper。

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)19

根據不同的文件格式創建不同的文件處理類

TSharedPtr<IImageWrapper> ImageWrapper= ImageWrapperModule.CreateImageWrapper(EImageFormat::BMP);

UE目前支持的格式如下:

enum class EImageFormat : int8 { /** Invalid or unrecognized format. */ Invalid = -1, /** Portable Network Graphics. */ PNG = 0, /** Joint Photographic Experts Group. */ JPEG, /** Single channel JPEG. */ GrayscaleJPEG, /** Windows Bitmap. */ BMP, /** Windows Icon resource. */ ICO, /** OpenEXR (HDR) image File format. */ EXR, /** Mac icon. */ ICNS, /** Truevision TGA / TARGA */ TGA, /** Hdr file from radiance using RGBE */ HDR, /** Tag Image File Format files */ TIFF, };

判斷傳進來的文件格式,獲取文件名後綴,判斷文件格式,并且傳給圖片處理類

//獲取文件名後綴,判斷文件格式 FString Ex =FPaths::GetExtension(ImagePath,false); EImageFormat ImageFormat = EImageFormat::Invalid; if (Ex.Equals(TEXT("jpg"),ESearchCase::IgnoreCase) || Ex.Equals(TEXT("jpeg"),ESearchCase::IgnoreCase)) { ImageFormat = EImageFormat::JPEG; } else if(Ex.Equals(TEXT("png"),ESearchCase::IgnoreCase)) { ImageFormat = EImageFormat::PNG; } else if(Ex.Equals(TEXT("bmp"),ESearchCase::IgnoreCase)) { ImageFormat = EImageFormat::BMP; } // 加載圖片處理模塊 // 使用模塊管理器的帶有檢測功能的模塊加載方法LoadModuleChecked IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>("ImageWrapper"); // 根據不同文件格式創建不同的文件處理類 TSharedPtr<IImageWrapper> ImageWrapper= ImageWrapperModule.CreateImageWrapper(ImageFormat);

根據壓縮文件,解析圖片

// 根據壓縮文件,解析圖片 if (ImageWrapperPtr.IsValid() && ImageWrapperPtr->SetCompressed(ImageResultData.GetData(),ImageResultData.Num())) { }

内存分配的時候

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)20

,也可以把ImageResultDataNum()換成ImageResultData.GetAllocatedSize()

接下來去獲取BGRA的顔色數據

TArray<uint8> OutRawData; // 此數據跟格式無關 ImageWrapperPtr->GetRaw(ERGBFormat::BGRA, 8,OutRawData);

最後把顔色數據拷貝到需要的貼圖中

// 最後把顔色數據拷貝到需要的貼圖中 Width = ImageWrapperPtr->GetWidth(); Height = ImageWrapperPtr->GetHeight(); InTexture = UTexture2D::CreateTransient(Width,Height, PF_B8G8R8A8); if (InTexture) { //數據拷貝時候,如果是多線程的話,不加鎖可能會引起崩潰哦 // 加鎖,LOCK_READ_WRITE可讀可寫 void* TextureData = InTexture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE); // 賦值,把OutRawData顔色數據賦值給到InTexture FMemory::Memcpy(TextureData, OutRawData.GetData(), OutRawData.Num()); //解鎖 InTexture->PlatformData->Mips[0].BulkData.Unlock(); // 刷新資源 InTexture->UpdateResource(); return true; }

到此,LoadImageToTexture2D函數功能已經寫完,編譯運行

步驟5. 創建UI進行測試

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)21

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)22

創建4個按鈕,用來分别測試不同圖片

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)23

使用藍圖定義函數BP_LoadImageToTexture2D,定義4個按鈕事件,分别調用BP_LoadImageToTexture2D測試JPG,PNG,BMP等圖片

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)24

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)25

好了,最近這一節這麼多了,大家課後自己嘗試其他類型圖片,希望今天的内容對你有所幫助! 最後效果如下:

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)1

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)3

ue5如何添加材質裡的元素(UE5開發室内設計軟件RunTime資源加載)28

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
qq顯示剩餘内存不夠怎麼辦
qq顯示剩餘内存不夠怎麼辦
1、首先可以打開手機自帶的應用商城,進入到商城的管理頁面,在頁面上可以看到“應用卸載”和“空間清理”...
2026-06-21
2022食品科學與工程就業前景好嗎 好找工作嗎
2022食品科學與工程就業前景好嗎 好找工作嗎
每年都有很多考生選擇填報食品科學與工程專業,那麼,2022食品科學與工程專業就業前景好嗎?考生畢業後可以做什麼工作呢?下面和小編一起來看看吧!2022食品科學與工程專業前景如何食品科學與工程專業是以食品科學和工程科學為基礎的學科專業,研究和學習方向是食品的營養健康、工藝設計與社會生産,以及食品的加工...
2026-06-21
印刷媒體技術專業怎麼樣 印刷媒體技術專業就業方向如何
印刷媒體技術專業怎麼樣 印刷媒體技術專業就業方向如何
  高考填報志願時,印刷媒體技術專業怎麼樣、培養目标、就業方向、主要課程有哪些是廣大考生和家長朋友們十分關心的問題,為了方便大家查詢,已經為大家整理好了相關信息,供大家參考。  1、印刷媒體技術專業培養目标  本專業培養德、智、體、美全面發...
2026-06-21
機械自動化專業學什麼 就業方向有哪些
機械自動化專業學什麼 就業方向有哪些
在高考填報志願選擇專業時,很多考生對機械自動化專業學什麼的問題很好奇。下面是由本站編輯為大家整理的“機械自動化專業學什麼就業方向有哪些”。機械自動化專業學什麼主要課程有高等數學、英語、計算機制圖、計算機及語言、電工電子學、工程圖學、C語言及程序設計、理論力學、材料力學、流體力學,電工技術、微機原理及...
2026-06-21
動物科學專業學什麼課程 就業方向有哪些
動物科學專業學什麼課程 就業方向有哪些
在高考志願填報選擇院校時,關于動物科學專業的就業方向是很多考生所關心的問題。下面是由本站編輯為大家整理的“動物科學專業學什麼課程就業方向有哪些”。動物科學專業主要課程動物遺傳育種學、動物繁殖學、動物營養與飼料學。主幹課程:動物解剖學、動物組織胚胎學、動物生理學、動物生物化學、畜牧微生物學、動物遺傳學...
2026-06-21
Copyright 2023-2026 - www.tftnews.com All Rights Reserved