我要研究基於UDK配置本身的編譯環境。在前邊根據UDN的文檔能夠配置純新的效仿ExampleGame的環境。可是面臨着兩個問題:網絡
1.若是使用純新的工程,在前面基於UDKGame的config配置的內容將會面臨大量的更改。函數
A.這甚至會影響到咱們之前的光照環境等美術環節。oop
B. 基於Mobile的按鈕配置神奇的不會顯現,FramworkGameui
所以我要解決的問題之一是,效仿UTGame在config中加入本身的遊戲類型。從純腳本的方式來看僅是在DefaultEngine.下EditPackages=ArtGame便可。開啓UDK.exe便可以編譯之。spa
從要編譯C++的角度來看在EditScript中添加NativeScriptPackages爲當前要編譯的包便可。code
拋開更底層的引擎層,執行UDKGame的環境至少會包含如下底層類:blog
GameFramework:包含了MobileInputZone。 包含Native遊戲
UDKBase:SimpleGame等基礎類。 包含Nativeip
UTGame: 這是構建在UDKBase之上的層,純UnrealScript。文檔
2.生成的編譯
虛幻有一套基於UnrealBuildTool的編譯過程,這套流程中須要用C#在其配置環境中配置註冊本身的Native代碼。我能夠在這裏面添加而且讓本身的包經過Native編譯經過。然而下面的問題3是目前讓我糾結的地方。
3.怎麼像UTGame同樣在UDK目錄下進行編譯
個人理解是這樣的,拋開本來UDK給的純腳本在DefaultEngine中添加本身的UnrealScript包方式,就像上邊的描述。擴展UC是很是簡單的,本來的引擎僅是須要鏈接架設的UC虛擬機。
可是C++便不一樣,他會潛入到引擎中。編譯了本身的native code會改變引擎。
我有兩套解決方案實現這個過程:
A.將本身的ArtGame像UTGame同樣設置成純淨的UC code。更改UDKBase層級對其進行Native修改便可。編譯的時候使用UDKGame進行便可。暴露出來一些native函數調用被ArtGame所使用。
這樣我就會像使用UDK同樣使用UE3.
class ArtPlayerController extends GamePlayerController config(Game); //使用Native返回字符串 exec function TestNative() { local string s; local ArtSocketObject UCObject; UCObject=new class'ArtSocketObject'; s=UCObject.NativeRetString(); ClientMessage(s); }
class ArtSocketObject extends Object Native(Socket); native function string NativeRetString();
上面的過程是通常的native code調用方法。
EngineLoop
{
UDKGame
{
UDKBase()
UTGame()
}
ArtGame
{
UDKBase()
ArtGameUC()
}
}
B.然而上述過程有一個巨大的風險,UDKBase代碼量龐大,改動起來很是的危險。而且對於頻繁修改的工程項目是很是難以控制的。尤爲是咱們還要解決棘手的網絡層,將會面臨棘手的大量數據定義和傳輸。
又迴歸到問題的本質了,怎麼在UDKGame的層級添加本身的代碼嘞?
EngineLoop
{
UDKGame
{
UTGame
{
}
ArtGame
{
}
}
}