手游中游戏设置的加载、存储方式

本文介绍了一款吃鸡手游中如何通过不同的model实例管理各种游戏参数,包括操作、音频和社会交互等模块。具体实现上,利用Dictionary保存参数类型到数据的映射,并详细解释了数据的读写方式以及本地存储的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以吃鸡手游为例,游戏的参数分为操作、音频、社交等等模块,每个模块数据的管理对应一个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()也是通过这种方式读取数据的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值