當前位置: 華文問答 > 遊戲

虛幻引擎對mod的支持怎麽樣?

2023-05-11遊戲

最近研究了一下Mod的實作方案,網上找了許多,離不開兩個東西,打包和外掛程式,虛幻引擎會在遊戲啟動時檢索Content、Saved和Plugins這些資料夾下的Pak資料夾們,然後把所有pak檔收集起來載入,然後PluginManager就初始化了,開始找有沒有需要預設啟用的外掛程式,並且載入他。

寫死是壞文明!壞文明!!!

最終也是找到了兩個可以用於打包外掛程式的解決方案,一個是查理鵬大佬編寫的HotPatcher外掛程式,該外掛程式可以打熱更包,並且還可以打包GameFeature,但該外掛程式僅支持到5.1版本,硬修改後編譯會導致功能不正常,作者說後續會更新,但現在我急急急急急,所以我就去找有沒有別的方法能夠幫我打個包。

在搜尋的時候,發現一篇文章,教你如何添加Mod支持,這裏使用的是打包自訂描述檔,用於告訴UnrealPak我需要你用什麽參數去打包,這種打包方式支持外掛程式,也就是打包DLC,用DLC名字檢查Plugins資料夾中有沒有叫這個名字的外掛程式。但在我自己的多種嘗試下都無法實作,也不太清楚是什麽問題,所以就先暫時跳過手動設定描述檔的方案。

計畫啟動程式打包

後來發現了一個叫做UGC外掛程式的UE4計畫:文章連結,這個計畫需要重新編譯引擎源碼,我的原則是使用公版引擎做盡可能多的事兒,當時以為沒戲了,無意中找到了一個論壇貼文,裏面在討論如何讓這個UGC外掛程式支持虛幻5,就發現樓中有大佬寫出了一個UE5能用的外掛程式(該外掛程式其實就在官方儲存庫的Fork下,最多星的那位就是這個外掛程式,該外掛程式支持5至今為止的版本號,也就是5.0,5.1,5.2,5.3都支持,只需要修改部份程式碼即可編譯透過,而且功能正常),社群的力量真的是無限大。

那就廢話不多說,開始研究這個範例計畫和外掛程式,也是在這個範例計畫中,我也是第一次發現,虛幻留了很多Mod支持的東西,FPaths中有個ModsDir來獲取Mods資料夾的位置(其實我後來並沒有使用這個)、Plugin也有一種Type是Mod等等。這個外掛程式能夠建立Mod型別的Plugin,僅支持藍圖,可以添加資產,需要在打包計畫後,獲得Cook出來的資產登錄檔,把他放在Release資料夾中,外掛程式會辨識這個Release資料夾中的資產登錄檔來給Mod打包,但這個外掛程式打包的原理其實還是打包DLC,只是多了一些使用者易用的按鈕。打包完成之後可以將pak檔直接丟到遊戲目錄Content下的Pak中,遊戲啟動時便會自動讀取並掛載這些Mod的Pak檔,PluginManager初始化時自動啟用該外掛程式,該外掛程式會搜尋類別為Game Mod的外掛程式(是寫死,有點呃呃),然後用GameInstance子系統存這些外掛程式的陣列,用於Mod的實作等,總體來說,這種方法很巧妙,可以後面自己讀取外掛程式Pak裏的內容,然後添加模組的實作方法,大佬們可以看看這個外掛程式的源碼,了解具體的實作。

後來又發現,虛幻5不是有個外掛程式叫GameFeature嗎,Lyra、古代山谷都在使用,想用就開,不想用就關,【堡壘之夜】便是使用這個GameFeature實作了更換賽季時,或者單次活動時,都能更輕松地輪換Gameplay和遊戲內容,具體可以檢視官方介紹:釗哥介紹GameFeature(釗哥有介紹GameFeature的文章,在知乎)

GameFeature的本質還是外掛程式,那我是不是可以用這個UGC外掛程式去幫我打包呢,當然是可以的,修改也是十分的簡單,在Editor模組中找到這個:

然後給種類加一個或,在按鈕事件中加上對於GameFeature型別外掛程式的檢測

接著就可以給Mod加東西了,加完東西之後,記得檢查以下參數:

一個是GameFeature的初始狀態,你希望他被載入後對遊戲造不造成影響,一個是預設啟用,作為Mod來說,這個一定是需要勾上的,它需要在Pak被Mount後自動啟用,但是在編輯器界面不讓√,就需要在uplugin檔中修改。接著就可以打包GameFeature了,打包失敗的話可能需要開啟解決方案重新編譯一下計畫。

找到Pak,放在Content資料夾下,應該可以放在FPaths中的ModsDir中,但需要手動掛載Pak,並且讓PluginManager載入那個外掛程式(這裏不太會,求助一下大佬,有解決方法後續會更新文章的),啟動遊戲,在控制台中輸入ListGameFeaturePlugins,就可以看到這個GameFeature被載入了,並且還顯示了他的啟用狀態

如果不是Active,就需要手動啟用,這裏可以寫一些遊戲內的使用者介面,給使用者自行選擇啟用哪些GameFeature。

這個便是非常簡單的,給遊戲添加Mod支持的方法了,自己的知識淺薄,俺也是研究了好久,帶給大家一些小小的技巧,希望大家可以用得上。