以吃雞手遊為例,遊戲的參數分為操作、音頻、社交等等子產品,每個子產品資料的管理對應一個model執行個體,這些model執行個體儲存于一個單例settingManager中以便擷取:
public class SettingManager
{
private BattleSettingModel battleSettingModel_;
private BasicSettingModel basicSettingModel_;
private DrugSettingModel drugSettingModel_;
//。。。
private static SettingManager instance;
public static SettingManager Instance {
get {
if (instance == null) {
instance = new SettingManager();
}
return instance;
}
}
//。。。
}
例如一個basicSettingModel,管理遊戲的基本設定,在該類中,使用
Dictionary<BasicSettingType, BasicSettingItem> basicItemsDic
來儲存參數類型到參數資料的映射,用
public object GetSettingItemValue(BasicSettingType settingType) {
return basicItemsDic[settingType].settingValue.value;
}
以及
public bool UpdateSettingItemValue(BasicSettingType settingType, object value)
{
if (basicItemsDic[settingType].settingValue.value.Equals(value) == false) {
SettingValue settingValue = basicItemsDic[settingType].settingValue;
settingValue.value = value;
settingValue.Write(settingType.ToString());//寫入到本地檔案
if (this.OnControlBasicTypeChangedDelegate != null) {
this.OnControlBasicTypeChangedDelegate(settingType);
}
return true;
} else {
return false;
}
}
進行資料的讀寫,注意basicItemsDic隻是一個運作時暫存的資料結構,真正的資料儲存于本地或者遠端伺服器。在model初始化時,我們會将basicItemsDic通過本地或遠端擷取的手段指派:
public BasicSettingModel() {
foreach (BasicSettingType type in Enum.GetValues(typeof(BasicSettingType))) {
basicItemsDic[type] = new BasicSettingItem(type, new SettingValueEnum());
}
ParseSettingFromLocal();
}
在上述UpdateSettingItemValue的時候,不僅會更改basicItemsDic的内容,還會進一步修改本地或者遠端伺服器資料,這裡通過
settingValue.Write(settingType.ToString())
的方式寫入到本地,實際上本地檔案的讀寫調用的是UnityEngine.PlayerPrefs。如:
public class SettingValueFloat : SettingValue
{
public override void Write(string key)
{
PlayerPrefs.SetFloat(key, (float)value);
}
public override void Read(string key)
{
value = PlayerPrefs.GetFloat(key);
}
}
包括代碼中ParseSettingFromLocal()也是通過這種方式讀取資料的。