2012年3月7日 星期三

Unreal的ini檔

Unreal的ini檔可以用來變更許多設定,格式跟Windows的ini檔有點像,但多了許多自訂的功能。它一樣也是用Section、Key=Value的格式來排列分類,不過型別變成是UnrealScript支援的型別。

UObject的ini格式


例如UDKInput.ini的前兩行:
[Engine.PlayerInput]
MoveForwardSpeed=1200
第一行中括號內的Engine.PlayerInput對應到Engine package內的PlayerInput類別。點的前面是script package的名稱,後面是類別的名稱。

第二行則是對應到PlayerInput類別的MoveForwardSpeed屬性,可以在PlayerInput.uc中找到這個屬性:
/** move forward speed scaling */
var()    config        float    MoveForwardSpeed;

非UObject的ini格式


並非所有的ini檔欄位都會對應到一個UnrealScript屬性,例如UDKEngine.ini的前兩行:
[URL]
Protocol=unreal
中括號中的URL並沒有對應到一個UnrealScript類別,欄位Protocol自然也不會對應到一個UnrealScript屬性。像這種沒有UnrealScript對應的欄位可以在C++用GConfig->GetInit()之類的函式來取得。

ini檔繼承


在專案的config目錄中,可以看到成對的ini檔,例如UDKInput.ini和DefaultInput.ini,冠著專案名稱的ini檔才是遊戲中所使用的設定檔。

當UE執行時會去讀取DefaultInput.ini的內容,裡面頭兩行如下:
[Configuration]
BasedOn=..\Engine\Config\BaseInput.ini
第二行告訴UE這個ini的內容是從BaseInput.ini修改而來的,有點像是類別繼承後覆寫的概念。然後UE在結合這兩個檔案後會產生冠著專案名稱的同名ini檔。
BaseInput.ini + DefaultInput.ini = UDKInput.ini

當UE執行時會把ini檔的內容讀取到記憶體中,所以再去修改ini擋是不會馬上看到結果的,可以重新啟動UE來更新。如果不想重啟UE,也可在命令列使用set指令動態變更屬性值。

UE關閉時會自動把設定值存回冠著專案名稱的ini檔中。

沒有留言:

張貼留言