using System;
using UnityEngine;
namespace AlicizaX
{
public static partial class Utility
{
public static class PlayerPrefsX
{
///
/// 当前用户前缀,用于隔离不同用户的配置项。
///
public static string CurrentUserPrefix { get; set; }
///
/// 组合完整键名,格式为"[前缀].[原始键名]"
///
private static string CombineKey(string settingName)
{
return string.IsNullOrEmpty(CurrentUserPrefix)
? settingName
: $"{CurrentUserPrefix}.{settingName}";
}
///
/// 保存游戏配置。
///
public static bool Save()
{
PlayerPrefs.Save();
return true;
}
///
/// 检查是否存在指定配置项。
///
public static bool HasSetting(string settingName)
=> PlayerPrefs.HasKey(CombineKey(settingName));
///
/// 移除指定配置项。
///
public static bool RemoveSetting(string settingName)
{
var fullKey = CombineKey(settingName);
if (!PlayerPrefs.HasKey(fullKey)) return false;
PlayerPrefs.DeleteKey(fullKey);
return true;
}
///
/// 清空所有配置项(包括所有用户)。
///
public static void RemoveAllSettings() => PlayerPrefs.DeleteAll();
// 布尔值处理
public static bool GetBool(string settingName)
=> PlayerPrefs.GetInt(CombineKey(settingName)) != 0;
public static bool GetBool(string settingName, bool defaultValue)
=> PlayerPrefs.GetInt(CombineKey(settingName), defaultValue ? 1 : 0) != 0;
public static void SetBool(string settingName, bool value)
=> PlayerPrefs.SetInt(CombineKey(settingName), value ? 1 : 0);
// 整型处理
public static int GetInt(string settingName)
=> PlayerPrefs.GetInt(CombineKey(settingName));
public static int GetInt(string settingName, int defaultValue)
=> PlayerPrefs.GetInt(CombineKey(settingName), defaultValue);
public static void SetInt(string settingName, int value)
=> PlayerPrefs.SetInt(CombineKey(settingName), value);
// 浮点数处理
public static float GetFloat(string settingName)
=> PlayerPrefs.GetFloat(CombineKey(settingName));
public static float GetFloat(string settingName, float defaultValue)
=> PlayerPrefs.GetFloat(CombineKey(settingName), defaultValue);
public static void SetFloat(string settingName, float value)
=> PlayerPrefs.SetFloat(CombineKey(settingName), value);
// 字符串处理
public static string GetString(string settingName)
=> PlayerPrefs.GetString(CombineKey(settingName));
public static string GetString(string settingName, string defaultValue)
=> PlayerPrefs.GetString(CombineKey(settingName), defaultValue);
public static void SetString(string settingName, string value)
=> PlayerPrefs.SetString(CombineKey(settingName), value);
// 对象序列化处理
public static T GetObject(string settingName)
=> Utility.Json.ToObject(GetString(settingName));
public static object GetObject(Type objectType, string settingName)
=> Utility.Json.ToObject(objectType, GetString(settingName));
public static T GetObject(string settingName, T defaultObj)
{
var json = GetString(settingName, null);
return string.IsNullOrWhiteSpace(json) ? defaultObj : Utility.Json.ToObject(json);
}
public static object GetObject(Type objectType, string settingName, object defaultObj)
{
var json = GetString(settingName, null);
return string.IsNullOrWhiteSpace(json) ? defaultObj : Utility.Json.ToObject(objectType, json);
}
public static void SetObject(string settingName, T obj)
=> SetString(settingName, Utility.Json.ToJson(obj));
public static void SetObject(string settingName, object obj)
=> SetString(settingName, Utility.Json.ToJson(obj));
}
}
}