最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

UE4 使用藍圖工具依靠DataTable批量創(chuàng)建和修改DataAsset (超實用)

2023-01-27 08:01 作者:末日時你吃了嗎  | 我要投稿

前言:

個人不是很喜歡在游戲運行期間讀取數(shù)據(jù)表,也不太喜歡使用DataTable C++ API。大部分情況下使用的都是DataAsset,通過直接訪問DataAsset 來獲得各種數(shù)據(jù)展示、配置信息。

即僅將DataTable作為能夠方便快速直觀地 管理與修改數(shù)據(jù)的手段,將DataAsset作為數(shù)據(jù)獲取的來源。

本文分為兩個部分,分別為批量創(chuàng)建與批量修改。需要提前注意的是,兩者使用的藍圖工具所繼承的父類是不一樣的。


Part?Ⅰ. 批量創(chuàng)建

第一步:用C++寫一個DataAsset創(chuàng)建方法。該操作貌似無法通過藍圖實現(xiàn)。

· ItemClass 所需要創(chuàng)建的類文件,PackagePath 所創(chuàng)建的目錄,AssetName?所創(chuàng)建的文件名稱

·? 該方法是 繼承了UBlueprintFunctionLibrary的類中 ,所定義的靜態(tài)方法。故可以直接通過藍圖調(diào)用。

·? 這里的UDreamItem 是繼承了UPrimaryDataAsset的。


第二步:創(chuàng)建藍圖工具

· 這里的父類我們選擇 EditorUtilityObject


第三步:重寫Run事件。

一個示例

大致步驟如下:

1、獲得 DataTable中的所有行名稱,

2、遍歷 行名稱,每次遍歷都 通過行名稱?讀取?表行數(shù)據(jù),并且調(diào)用我們之前寫的創(chuàng)建DataAsset的方法。

3、將創(chuàng)建出來的DataAsset(即方法返回值) 強轉(zhuǎn)成我們期望的類型,那之后根據(jù)讀取到的表行數(shù)據(jù),設置DataAsset中相應的數(shù)據(jù)。

注意事項:

1、路徑名稱必須以"/"開頭,

此外,假如你想要將DataAsset 創(chuàng)建在名為 A的文件夾中,路徑的末尾應當是 "A/任意字符 "


2023年01月30日補充:

被劃掉部分的說法是完全錯誤的。路徑名稱正確表示形式應當為:

[ /目錄名稱/文件名.文件名]

區(qū)別于原先的?[ 目錄名稱/任意字符.文件名]

以位于/Game/Blueprint文件夾下的,類型為DreamItem、名稱為ItemD的資源為例,當右鍵CopyReference時,復制得到的引用路徑為:

“DreamItem'/Game/Blueprint/ItemD.ItemD'”

故我們傳入的正確路徑應當是:[包名+文件名] 的形式。

這樣做的好處是,獲取了有效路徑后,我們可以直接使用?DoesAssetExist 和LoadAsset這兩個節(jié)點,前者能夠根據(jù)路徑判斷資源是否存在,后者能夠?qū)⒙窂綄馁Y源加載成UObject。


CreateNewAsset 升級版如下:

該方法的作用如下:

如果資源已經(jīng)存在,將其加載出來并修改。
如果不存在,則將其創(chuàng)建出來后再修改。

該方法可以直接用C++實現(xiàn),只是要額外引入藍圖編輯模塊 ← 太麻煩了還不如直接用藍圖實現(xiàn)...


02.03 再度補充:

對于所有通過路徑直接加載出來的AssetData,應當對其進行MarkDirty操作,以方便后續(xù)進行批量保存操作。示例:


2、DataAsset里面的文本數(shù)據(jù)往往會以 FText的形式存儲,當我們將數(shù)據(jù)表的中FString 直接為其賦值的時候,該值的末尾會出現(xiàn)感嘆號提示,原因在于寫入的FText未被格式化,屬于“本地方言”。我們可以通過 FormatText?的方式將其格式化。如圖所示。

3、DataAsset中的屬性應當設置為?BlueprintReadWrite,不然改個寂寞。


FText的優(yōu)點在于可以被格式化,可以被直接展示至UI。

FString的優(yōu)點在于易于修改,以完成字符的截取、拼接、替換等操作。


我愿稱之最強文本處理函數(shù)


第四步:右鍵創(chuàng)建的藍圖工具運行即可。記得保存。

由于我們是在游戲外手動操作的,無需擔心性能問題,邏輯寫得再復雜也沒有關系。



Part?Ⅱ. 批量修改

注:我沒找到可以直接加載PrimaryAssetID的方式,使用AsyncLoadPrimaryAsset的話 需要傳入一個WorldContextObject,我們沒辦法整一個出來。故這里采用了AssetActionUtility的方式。


2023年01月30日補充:

直接用C++在FunctionLib中 寫一個加載方法就行了。示例:

此時我們直接使用 GetPrimaryAssetIdList的方式 批量獲取,然后逐一進行加載。如圖所示。

兩種方法怎么方便怎么來吧??=? =



第一步:創(chuàng)建藍圖工具,與上面不同的是,我們選擇的父類是AssetActionUtility。

第二步(可選):重寫GetSupportedClass方法


· 這里傳入的類就是我們要操作的類名。該方法的用處后面會解釋。


第三步:創(chuàng)建讀取數(shù)據(jù)的方法,我這里方法名稱是 LoadDescription。

又一個示例


大致步驟如下:

1、通過GetSelectedAssets獲取被我們選中的數(shù)據(jù)

2、遍歷,將所獲得的UObject強轉(zhuǎn)為我們需要的類型。

3、后續(xù)的處理邏輯和前面基本一樣,都是讀表然后改數(shù)據(jù)。就不贅述了。


第四步

在內(nèi)容瀏覽器中批量選中我們需要的資產(chǎn),右鍵,會發(fā)現(xiàn)多出了一個ScriptedAction選項。運行我們寫的方法即可。

而第二步設置類的作用在于 ?僅右鍵選中該類的文件時 才會出現(xiàn)額外選項,即相當于過濾了。

結(jié)束語:

踩坑沒什么,但一個坑前仆后繼地有人踩多少有些愚蠢了,這也是我寫這篇筆記的原因,也希望大家能自己寫一些筆記。寫得多了,后續(xù)的人凡事遇到問題 就不會只能用 蹩腳的英文在英文搜索引擎中 搜索用英文寫出來的答案了 =? =?


UE4 使用藍圖工具依靠DataTable批量創(chuàng)建和修改DataAsset (超實用)的評論 (共 條)

分享到微博請遵守國家法律
社会| 新丰县| 酉阳| 边坝县| 洛扎县| 布拖县| 无为县| 綦江县| 进贤县| 虹口区| 耒阳市| 将乐县| 恭城| 锡林浩特市| 皮山县| 贵州省| 扬中市| 鸡泽县| 呼图壁县| 蓝山县| 上蔡县| 白朗县| 舟山市| 冀州市| 安仁县| 大渡口区| 景谷| 利川市| 杭锦后旗| 安义县| 醴陵市| 肥东县| 鹤岗市| 二连浩特市| 海林市| 河津市| 微博| 清河县| 晋江市| 海丰县| 岳西县|