banner
YZ

周周的Wiki

种一棵树最好的时间是十年前,其次是现在。
zhihu
github
csdn

UE5藍圖實戰:VaRest插件應用指南 - 從JSON文件到無限列表

在本文中,我將演示如何在 UE5 中使用 VaRest 插件來讀取 JSON 文件,並將數據顯示在無限滾動的列表中。VaRest 是一個強大的開源插件,它使得在 UE5 中進行 HTTP 請求和 JSON 數據處理變得簡單直觀。

安裝並啟用 VaRest 插件#

首先需要在虛幻商城 搜索VaRest關鍵字,找到該插件點擊 “免費按鈕”,然後切換到,在保管庫下降 VaRest 安裝到所需要的項目引擎中即可。

最後需要在引擎中開啟該插件的使用,依次在菜單欄點擊編輯 -- 插件 -- 搜索並勾選 VaRest-- 重啟引擎

image.png

創建 Json 文件和搭建無限列表#

  1. 使用 Json 在線編輯器模擬 Json 數據

在項目 Content 目錄下新建 Data 文件夾,新建文本文件命名為 Info.json。將在線 Json 編輯器模擬的數據複製粘貼到 Info.json 中。
image.png

  1. 搭建無限列表 UI
    我們需要做一個 UI 來顯示 Json 數據。

首先做一個無限列表顯示 Item:命名為 WBP_StudentPanel,添加一個 ListView 控件,在其列表記錄欄下點擊 + 號新建一個 EntryWidgetClass 藍圖類,用於顯示單個學生信息的預製體 UI,命名為 WBP_StudentItem。如下圖:

image.png
image.png

藍圖節點連連看#

定義數據結構#

這裡還需要定義兩個基本數據結構用於數據的解析和顯示。新建一個構造體藍圖,命名為 S_StudentInfo,定義與之前 Json 數據匹配的四個變量:name、number、height、weight 用於解析 Json 數據後構造的數結構體;新建一個繼承於 Object 類的藍圖類,命名為 O_StudentInfo。定義一個變量,類型為剛才定義的構造體:S_StudentInfo 用於將數結構體據顯示的列表 UI 上。如下圖兩個基本藍圖類:
image.png

完善測試藍圖邏輯#

初始顯示無限列表 UI#

在一個相機控制的藍圖類中,開始 BeginPlay 節點連接 Create Widget 節點,Class 引腳選擇 WBP_StudentPanel,執行引腳連接到 Add to Viewport。如下圖:
image.png

點擊數字 0 鍵解析 Json 並顯示到列表中#

這裡將用到 VaRest 插件提供的 API,所以在此之前確保 VaRest 插件已啟用。

  1. 解析 Json 的藍圖邏輯

首先使用 Load Json from File 函數解析相對於 Content 目錄下的 json 文件,所以 Path 引腳處填入 Data/Info.json。然後在 Get Array Field 方法解析 data 節點下的數據,構造一個 Student Data 的 Json 數據,如下圖:
image.png

然後 for 循環遍歷這個 Json 數組,每個元素單獨解析,這裡使用 Get String Field 方法對 name、number、height、weight 單獨解析然後再構造 S_StudentInfo 添加到 StudentInfoList 數組中,最後定義一個事件分發器 ParseStudentInfoCompleted,在解析完成後調用將 StudentInfoList 傳遞出去。如下圖:
image.png

  1. 綁定事件分發器 ParseStudentInfoCompleted

在 WBP_StudentPanel 中,從 Event Construct 牽出引線獲取相機控制器的引用,綁定事件分發器,再用 Create Event 節點創建一個事件觸發函數 ParseStudentInfoCompletedCallBack。
image.png

完善函數 ParseStudentInfoCompletedCallBack:

定義一個變量 StudentInfos,類型為 O_StudentInfo。對於傳遞過來的構造體數組進行遍歷,單個元素構造 O_StudentInfo。使用 Add item 節點添加到 StudentListView(這裡是一個無限列表 ListView 控件),完成之後設置 ListView 的 item,用到 SetListItems(這裡很重要,會觸發後續的更新接口事件):
image.png

  1. 將數據顯示到單個列表元素中

這裡關鍵的一步是在 WBP_StudentItem 藍圖的類設置中實現一個接口:User Object List Entry

然後實現 On List Item Object Set 事件就好了,對於傳過來的 Object 對象轉換為 O_StudentInfo 再獲取構造體 S_StudentInfo 的引用,最後依次對 Text 組件賦值即可。
image.png

運行測試結果#

點擊 Play 運行,按下鍵盤數字鍵 0,無限列表成功顯示 Json 數據:
image.png

這個 ListView 對於海量數據來說真是挺有用的

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。