特别提示: 本系列基于Unity 2019.4.8,架構版本GameFramework 2021.05.31
本系列部落格位址: 傳送門
遊戲配置是以鍵值對的形式存儲玩家資料,對 UnityEngine.PlayerPrefs 進行封裝,也可以将這些資料直接存儲在磁盤上。
一、正常用法
擷取遊戲配置元件
寫入
public void SetInt(string settingName, int value)
public void SetFloat(string settingName, float value)
public void SetString(string settingName, string value)
public void SetObject<T>(string settingName, T obj)
讀取
public int GetInt(string settingName)
public float GetFloat(string settingName)
public string GetString(string settingName)
public T GetObject<T>(string settingName)
移除
public void RemoveSetting(string settingName)
public void RemoveAllSettings()
儲存遊戲配置
二、實踐
上一篇遺留的問題,我們需要在Setting界面儲存我們的設定,有儲存肯定也是需要讀取的
- 增加Constant腳本
public static class Constant
{
public const string Language = "Setting.Language";
public const string MusicToggle = "Setting.MusicToggle";
public const string MusicVolume = "Setting.MusicVolume";
public const string SoundEffectToggle = "Setting.SoundEffectToggle";
public const string SoundEffectVolume = "Setting.SoundEffectVolume";
public const string UISoundEffectToggle = "Setting.UISoundEffectToggle";
public const string UISoundEffectVolume = "Setting.UISoundEffectVolume";
}
- 在Setting界面點選确定按鈕儲存設定
public void ClickConfirmBtn()
{
if (m_SelectedLanguage == Component.Localization.Language)
{
Close();
Component.UI.OpenUIForm("Assets/Prefabs/Canvas_Menu.prefab", "Default");
return;
}
Component.Setting.SetString(Constant.Language, m_SelectedLanguage.ToString());
Component.Setting.Save();
//關閉架構 ShutdownType為重新開機
GameEntry.Shutdown(ShutdownType.Restart);
}
- 在進入ProcedureExample流程時初始化Language
//初始化語言設定
private void InitLanguageSettings()
{
if (Component.Base.EditorResourceMode && Component.Base.EditorLanguage != Language.Unspecified)
{
// 編輯器資源模式直接使用 Inspector 上設定的語言
return;
}
Language language = Component.Localization.Language;
if (Component.Setting.HasSetting(Constant.Language))
{
try
{
string languageString = Component.Setting.GetString(Constant.Language);
language = (Language)Enum.Parse(typeof(Language), languageString);
}
catch
{
}
}
if (language != Language.English
&& language != Language.ChineseSimplified)
{
// 若是暫不支援的語言,則使用中文
language = Language.ChineseSimplified;
Component.Setting.SetString(Constant.Language, language.ToString());
Component.Setting.Save();
}
Component.Localization.Language = language;
Log.Info("Init language settings complete, current language is '{0}'.", language.ToString());
}
至此我們已經可以随意的切換多語言
Demo位址: 傳送門