存放方式 | 固定路徑資源 | ini檔的section方式 | ini檔的屬性預設值方式 |
程式存取方式 | 載入物件後存取 | 呼叫存取函式 | 建立物件後存取 |
文字檔存取 | 不可 | 可 | 可 |
屬性視窗存取 | 可 | 不可 | 可,但需另外寫程式 |
執行時期更新 | 可,但需另外寫程式 | 可,但需另外寫程式 | 在遊戲中可用set指令修改 |
以方便性考量,建議將參數放在一個UnrealScript類別後利用ini檔儲存。這樣可以在文字檔內編輯參數,也可在遊戲執行時使用set指令修改參數。set指令的格式如下:
set <類別名稱> <屬性名稱> <數值>例如要修改自訂的MyPawn類別的移動速度成400:
set MyPawn GroundSpeed 400不過要注意用set指令修改的屬性預設值是儲存在冠著專案名稱的ini檔,而不是冠著Default的ini檔。
使用UnrealScript類別存放參數還有一個好處,就是可以利用屬性視窗編輯參數。物理資源編輯器PhAT就是利用PhATSimOptions類別存放參數,然後用屬性視窗來顯示。
範例
在UnrealScript中要使用ini檔的話,要用關鍵字config。在類別宣告裡config用來指定ini檔名,在變數宣告的config用來指示這個變數的預設值要放在ini檔。宣告為config的變數,其預設值就不能在defaultproperties區塊裡指定了。以下程式碼示範如何將參數放在一個UnrealScript類別內:
class MyOptions extends Object native hidecategories(Object) config(EditorUserSetings); var() config bool bBoolOption; var() int IntOption;在程式中要讀取參數時,因為參數存放在類別預設值,所以就直接建立一個物件來存取:
UnrealScript | local MyOptions Options; Options = new MyOptions; |
C++ | UMyOptions* Options = ConstructObject<UMyOptions>( UMyOptions::StaticClass() ); |
當要寫入參數設定時,直接呼叫SaveConfig()函式即可:
UnrealScript | Options.SaveConfig(); |
C++ | Options->SaveConfig(); |
如果有些參數想要條件式寫入,可以不宣告為config變數,改用手動寫入。如上例中的IntOption屬性,想寫入時就呼叫函式:
GConfig->SetInt( TEXT("MyGame.MyOptions"), TEXT("IntOption"), Options->IntOption, GEditorUserSetingsIni ); GConfig->Flush( FALSE, GEditorUserSetingsIni );
沒有留言:
張貼留言