五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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 (超實用)的評論 (共 條)

分享到微博請遵守國家法律
太保市| 云霄县| 通河县| 新兴县| 洛川县| 伊通| 云梦县| 老河口市| 翁源县| 安阳县| 桓台县| 鞍山市| 容城县| 三穗县| 十堰市| 吴江市| 新疆| 奉化市| 固安县| 聂荣县| 西充县| 都昌县| 游戏| 荃湾区| 涪陵区| 南陵县| 金塔县| 保靖县| 托克托县| 泸州市| 义乌市| 嘉黎县| 安达市| 汶川县| 海城市| 寻乌县| 广安市| 文成县| 遂昌县| 红安县| 南江县|