特别提示: 本系列基于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地址: 传送门