unity---本地存储

文章介绍了在Unity引擎中如何利用PlayerPrefs进行基础数据存储,以及结合Newtonsoft.Json库实现单个和多个GameObject数据的序列化和反序列化存储。通过定义实体类,将游戏对象信息转换为JSON字符串,然后存储到PlayerPrefs,需要时再解析回对象。此外,还展示了如何处理列表数据的存储和获取过程。

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

目录

1.基础存储

2.单个gameObjct数据存储

2.1实体类

2.2赋值存储

3.多个gameObject数据存储

3.1实体类

3.2list 转json 

3.3存储与解析



1.基础存储

unity提供的现成可用的本地存储方式:

        PlayerPrefs.SetFloat("size", 1.5f);
        PlayerPrefs.SetInt("age", 10);
        PlayerPrefs.SetString("name", "David");

2.单个gameObjct数据存储

2.1实体类


using UnityEngine;

public class Entity_fwy
{
 
    public enum_fwy state;
    
    public string name_fwy = "";
    
    public int age;

}

2.2赋值存储

using System.Collections;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
using static Pp_enum;

public class Contr_fwy : MonoBehaviour
{
    
    void Start()
    {
        
        Entity_fwy entityFwy = new Entity_fwy();
        entityFwy.state = enum_fwy.idle;
        entityFwy.name_fwy = "XiaoBai";
        entityFwy.age = 18;

        //存储
        PlayerPrefs.SetString("fwy", JsonConvert.SerializeObject(entityFwy));

        //获取
        Entity_fwy enFwy = JsonConvert.DeserializeObject<Entity_fwy>(PlayerPrefs.GetString("fwy", ""));
        Debug.LogError("cc:" + enFwy.name_fwy);

    }

  
}

3.多个gameObject数据存储

3.1实体类

public class DataSave
{
   
    public string obj_name;

    public int obj_id;
    public Vector3 obj_pos;
    public int obj_scale;
}

3.2list 转json 

/// <summary>
    /// list 转json 
    /// </summary>
    public static string ToJson<T>(this T list)
    {
        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        return JsonConvert.SerializeObject(list, settings);
    }

3.3存储与解析


    [HideInInspector]
    public List<DataSave> list_sbHave = new List<DataSave>();

    public void dataSave( string str)
    {
        switch(str){
            case "sb":
            //string str = MyUtil.ToJson(list_dataHave_gt);
            string str = list_sbHave.ToJson();
            Debug.LogError("save:" + str);
            PlayerPrefs.SetString("have_sb", str);
            break;
        ......
    }

    public void DataGet()
    {
        string sb_str = PlayerPrefs.GetString("have_sb", "");
        if (string.IsNullOrEmpty(sb_str))
        {
            //默认拥有柜台
            DataSheBei ds1 = new DataSheBei
            {
                obj_name = "gt",
                obj_id = 12,
                obj_pos = new Vector3(-0.02f, 1.99f, -5),
                obj_scale = 1
            };
            PlayerPrefs.SetInt("barIndex", 0);
            list_sbHave.Add(ds1);
            //默认拥有1个四人桌
            DataSheBei ds2 = new DataSheBei
            {
                obj_name = "zy",
                obj_id = 1,
                obj_pos = new Vector3(-2.32f, 0.815f, -5),
                obj_scale = 1
            };
            PlayerPrefs.SetInt("tableIndex", 0);
            list_sbHave.Add(ds2);
        }
        else
        {
            JArray ja = (JArray)JsonConvert.DeserializeObject(sb_str);
            Debug.LogError("sb:" + ja.Count);
            for (int i = 0; i < ja.Count; i++)
            {
                DataSheBei ds = new DataSheBei();
                ds.obj_name = ja[i]["obj_name"].ToString();
                ds.obj_id = int.Parse(ja[i]["obj_id"].ToString());

                JObject jo = JObject.Parse(ja[i]["obj_pos"].ToString());
                ds.obj_pos = new Vector3(float.Parse(jo["x"].ToString()), float.Parse(jo["y"].ToString()), -5);
                ds.obj_scale = int.Parse(ja[i]["obj_scale"].ToString());
                list_sbHave.Add(ds);
            }
        }

        InitSbHave();
    ......
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格拉格拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值