Unity3D日常开发Unity3D中使用数据类保存数据,持久保存数据数据存放在跨场景调用数据类

Posted 恬静的小魔龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D日常开发Unity3D中使用数据类保存数据,持久保存数据数据存放在跨场景调用数据类相关的知识,希望对你有一定的参考价值。

推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

我发现还有很多小伙伴对于数据的保存很疑惑,不知道怎么保存数据,也不知道跨场景的数据怎么保存。

Unity的数据的持久化主要有以下几种方式:

  • 使用PlayerPrefs类,进行数据持久化
  • 使用数据类保存数据
  • 使用本地文件保存数据,比如Json、XML、TXT
  • 使用服务器获取数据

这里就不展开讲了,有机会再列一篇文章详细的讲一下。

这里只说一下这几种数据保存的优缺点。

1-1、使用PlayerPrefs类,进行数据持久化

优点:

它是持久存储于设备上的,只要用户没有删除应用或者手动去清除数据,PlayerPrefs的数据会一直保留,适合存储一些设置相关的信息。

PlayerPrefs采用键值对的方式进行数据的查询与存储。

缺点:

数据格式比较单一,只支持Int、Float、String这几种类型的数据。

1-2、使用数据类保存数据

优点:

数据保存在内存中,只要不关闭程序数据就一直存在,还可以跨场景调用数据类。

可以使用构造函数将数据类中的数组进行初始化,特别方便,不用担心忘了初始化了。

缺点:

程序不小心崩溃的时候,数据也会丢失,数据不会长久保存。

需要去自定义数据结构。

1-3、使用本地文件保存数据,比如Json、XML、TXT

优点:

数据一直存在,可以跨场景调用数据,数据持久化存在。

可以及时保存数据,避免程序奔溃后的数据丢失。

缺点:

需要进行IO操作,影响效率,代码难度也会提高。

需要学习特定格式文件的解析和读取代码。

数据保存到本地也可能被人为修改数据,造成错误。

1-4、使用服务器获取数据

优点:

数据一直存在,可以跨场景调用数据,数据持久化存在。

不用担心数据被人为修改,也不用担心数据的保存问题。

数据发给服务器,其他就不用管,需要数据的时候去服务器获取。

缺点:

需要建立服务器,如果数据量大的话,对服务器的压力也比较大。

二、使用数据类保存数据

本篇文章就针对使用数据类保存数据这种方式进行演示。

2-1、建立数据类

首先,我们新建一个GlobalData.cs脚本,名字不重要,只要自己觉得合适就行:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GlobalData : MonoBehaviour

    // Start is called before the first frame update
    void Start()
    
        
    

    // Update is called once per frame
    void Update()
    
        
    

对于数据类来说,不需要继承MonoBehaviour接口,因为不需要进行任何Start、Update函数操作:

public class GlobalData


添加一个私有构造函数,在类初始化的时候调用,可以用来初始化一些数组:

public class GlobalData

    // 私有构造函数,在类初始化的时候进行调用
    private GlobalData()
    
    

使用单例模式,设置一个全局单例对象:

public class GlobalData

    // 私有构造函数,在类初始化的时候进行调用
    private GlobalData()
    
    
    // 使用单例模式,设置一个全局单例对象
    private static GlobalData _instance;
    public static GlobalData Instance
    
        get
        
            if (_instance == null)
            
                _instance = new GlobalData();
            
            return _instance;
        
    

这样的话基本的结构已经完成了,就下来就是需要什么数据就设置什么数据即可。

2-2、添加数据字段

添加了姓名、年龄、性别、分数字段,如下:

using System.Collections.Generic;

public class GlobalData

    // 私有构造函数,在类初始化的时候进行调用
    private GlobalData()
    
        Score = new Dictionary<string, int>();
    
    // 使用单例模式,设置一个全局单例对象
    private static GlobalData _instance;
    public static GlobalData Instance
    
        get
        
            if (_instance == null)
            
                _instance = new GlobalData();
            
            return _instance;
        
    

    public string Name  get; set; //姓名
    public int Age  get; set; //年龄
    public bool Sex  get; set; //性别
    public Dictionary<string, int> Score  get; set; //分数 名字跟分数对应

注意:在构造函数中,将Dictionary类型的Score变量进行了初始化。

2-3、调用数据类

下面就演示一下如何设置数据类的变量,如何获取数据类的变量:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestCall : MonoBehaviour

    void Start()
    
        GlobalData.Instance.Name = "张三";
        GlobalData.Instance.Age = 18;
        GlobalData.Instance.Sex = true;
        GlobalData.Instance.Score.Add("张三", 88);

        Debug.Log(GlobalData.Instance.Name);
        Debug.Log(GlobalData.Instance.Age);
        Debug.Log(GlobalData.Instance.Sex);
        Debug.Log(GlobalData.Instance.Score["张三"]);
    

运行结果如下:

三、后记

你的点赞就是对博主的支持,有问题记得留言:

博主主页有联系方式。

博主还有跟多宝藏文章等待你的发掘哦:

专栏方向简介
Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。

以上是关于Unity3D日常开发Unity3D中使用数据类保存数据,持久保存数据数据存放在跨场景调用数据类的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D日常开发Unity3D中打包WEBGL后读取本地文件数据

Unity3D日常开发Unity3D中打包WEBGL后读取本地文件数据

Unity3D日常开发Unity3D中打包WEBGL后读取本地文件数据

Unity3D日常开发Unity3D中使用反射消灭Switch语句

Unity3D日常开发Unity3D中使用反射消灭Switch语句

Unity3D日常开发Unity3D中 C#反射Reflection的使用