UE4教程:擴展UE4——鏈接靜態(tài)庫到UE4引擎中
擴展UE4——鏈接靜態(tài)庫到UE4引擎中
目錄
*綜述
*范圍與注釋
*Visual Studio 2013/2015-庫構(gòu)型
*創(chuàng)建一個項目.
*升級另一個項目
*自定義目標UE4模塊
*以64bit平臺作為目標
*多線程動態(tài)鏈接庫
*第三方目錄
*虛擬引擎4(UE4)-構(gòu)建系統(tǒng)
* 擴展 Base ModuleRules 類
* 加載我們的庫
* Visual Studio 2013/2015——鏈接我們的庫
*啟動模塊
*編組
* 更多信息
綜述
本篇指導的目的是為大家展示如何鏈接靜態(tài)庫到使用Build System 的UE4引擎中,初期目標受眾是那些不打算升級引擎但希望通過提供相應功能的庫來拓展UE4的功能。
舉例說吧,我將生成一種叫BobsMagic的庫,在將它鏈接進一個叫UE4Magic的UE4 項目。
范圍與注釋
*你將可以鏈接自己設計的函式庫。
*本次指南不會深入到公開功能或定義任何AP1
*我希望閱覽者至少粗略理解C++,C#,以及MS Visual Studio 2013
*本文所提供的所有代碼路徑都來自于UE4 Project 基目錄。
自定義目標UE4模塊
我們將需要做一些其他修正以確保我們的庫能被很容易地鏈入。
以64bit平臺作為目標
憑借一個標準的靜態(tài)庫項目我們將把x86(32 bit)平臺作為目標,該指令不對UE4起作用。
1.打開項目屬性頁。2.選擇配置管理器3.打開使用中的方案平臺(Active Solution Platform),在下拉菜單中選擇<新...>4.鍵入或選擇x645.點擊“OK”完成保存
更多內(nèi)容請見targeting x64
多線程動態(tài)鏈接庫(Multi Threaded DLL)
虛幻引擎構(gòu)建系統(tǒng)預料到使用者提供一個之后會鏈接進動態(tài)鏈接庫(DLL),因此我們不得不確保我們的項目也能完成此鏈接。
1.打開項目屬性頁
2.過濾配置管理器> C/C++ > 代碼生成 > 運行時間庫(Configuration Properties > C/C++ > Code Generation > Runtime Library)
3.在下拉菜單中選擇多線程動態(tài)鏈接庫(Multi Threaded DLL/MD)
4.點擊“OK”完成保存
第三方目錄
創(chuàng)建你的項目,記錄庫被輸出的位置。根據(jù)你所創(chuàng)建的項目的模式你的庫文件(lib project)應位于/bin/Debug or /bin/Release,除非你提交前更改了位置。我們將把它們從這里移動到我們的UE4項目目錄,以解除引用和之后的打包。
打開一個新的瀏覽器窗口導入你的項目目錄。導入完成后創(chuàng)建一個新的路徑給你的庫-/ThirdParty/BobsMagic
對于每一個你要引用的庫你都將遵循這一步驟,假如我要增加V8庫我將創(chuàng)建/ThirdParty/V8
在這個目錄里我們將增加兩個新建文件夾——Libraries和Includes——以覆蓋它們各自的文件。Includes 是與你的庫相伴隨的頁眉文件,用于定義你在UE4引擎里引用的API(Application Programming Interface/應用程序編制界面)。你應該將你的*.庫文件(s)復制進Libraries目錄。
注意:這是一個任意的目錄。記錄它的路徑很重要,所以之后你會在構(gòu)建系統(tǒng)(build system)里引用它。
UE4——構(gòu)建系統(tǒng)
現(xiàn)在我們將要逐步執(zhí)行虛幻引擎,把我們的庫編址到引擎。
創(chuàng)建系統(tǒng)需要用到一些C#編碼,不過無須擔心。我們的示例將非常簡單,所以你只要復制粘貼下面的代碼就可以了。
擴展基礎(chǔ) ModuleRules類
大家也許應該添加兩個屬性到ModuleRules類。我將記錄的這兩個屬性是用來確保我們知道我們的模塊和第三方目錄的位置。這兩個屬性將利用System.IO命名空間,使用2個路徑靜態(tài)方法。
在 /Source/UE4Magic/UE4Magic.Build.cs里
LoadBobsMagic保持了一些build system的配置元素,接受TargetInfo對象,可以讓你在編譯時間自定義構(gòu)建。它被傳遞后可以讓我們載入視窗目標的庫,自后可以被用于靶向其他平臺。這也使用于以64bit或32bit平臺為目標的情況。如果你還記得,我在上面提到過x64平臺為目標,不過你也可以借此機會編譯出32bit(x86)的庫。
接下來我們將以將要鏈接的庫之名定義一個被傳遞的常量。
在 /Source/UE4Magic/UE4Magic.Build.cs里
?這是一個非常直截了當?shù)脑O置,不大可能代表一個完全跨平臺的構(gòu)建。我們已經(jīng)做到了創(chuàng)建在編譯時間通過的常量WITH_BOBS_MAGIC_BINDING,設為1(或真)。
Visual Studio 2013/2015——鏈接我們的庫
現(xiàn)在你可以將你的頁眉文件包含進去,并啟動執(zhí)行代碼。
啟動模塊(Startup Module)
虛幻引擎一些已知細節(jié)是你可以重寫默認的游戲執(zhí)行(Game Implement),當你的模塊被啟動/關(guān)閉(類似于裝載/卸載)時你能獲得一個已執(zhí)行的類函數(shù)。這未必與build system相關(guān),但卻是插件開發(fā)者們很有可能在初始化點尋找的常見的事。
在/Source/UE4Magic/UE4Magic.cpp里
你可以在此點啟動Visual Studio 調(diào)試器,一步步跟蹤代碼。如果你鏈接了調(diào)試版本,你甚至可以把代碼放入你所編譯的庫。他將裝載于 ThirdParty/BobsMagic/Includes/Welcome/ 的頁眉文件,讓庫像我們預期的那樣執(zhí)行。
編組(Marshalling)
你很快就能發(fā)現(xiàn),你的庫將不會使用虛幻引擎4里的相同類型。重要的是,你要在兩者之間以一種有意義切深思熟慮的方法編組你的數(shù)據(jù)。若在之后改變可能將會導致復雜化的問題。
當把V8鏈接進虛幻引擎4時,我在StringConv.h里發(fā)現(xiàn)了一對宏命令,用于在寬位字符(Wide Character)、統(tǒng)一碼(Unicode)、字符串(Strings)和C-style字符串(C style Character Strings)之間的轉(zhuǎn)換。所以我推薦各位再看看其他有用的轉(zhuǎn)換。你最終可能需要創(chuàng)建封裝器對象(Wrapper objects)。
更多信息
我已經(jīng)成功將V8鏈接進UE4了,現(xiàn)在正在編寫一個模塊讓大家在自己的項目里以JavaScript作為腳本語言。
- Tags:ue4
-
分享到:
全部評論:0條