Unity EasySave3封装管理类

2023-11-09

20230804 新增 加密处理接口

/// <summary>
/// 设置全局加密方式
/// </summary>
/// <param name="isAES"></param>
public static void SetEncryption(bool isAES)
{
    ES3Settings.defaultSettings.encryptionType = isAES ? ES3.EncryptionType.AES : ES3.EncryptionType.None;
}

EasySave3插件的封装管理类,适用于大部分Unity存档系统。
均为静态方法,把这个脚本保存在工程中,通过LocalSaveManager.xxx来调用。

  • 直接调用ES3内部封装核心代码
  • 适用于本地存储
  • 优化了多接口重载,提供一个接口
  • 解决插件图片调用质量设置的bug
  • 增加可编程的资源存放模式,在游戏启动时调用
// Author: 文若
// CreateDate: 2022/11/02

using System;
using UnityEngine;
using ES3Internal;


public enum E_StoreMode
{
    ALPHA,
    BETA,
    RTL
}

public class LocalSaveManager
{
    // BETA目录 Directory = DataPath
    public static readonly string ALPHA_SAVE_PATH = "../Test/";
    public static readonly string BETA_SAVE_PATH = "../SaveDatas/";
    public static readonly string FILEPATH = "save_data.es3";

    
    /// <summary>
    /// 设置存储路径 游戏启动时修改
    /// </summary>
    /// <param name="测试版本">E_StoreMode.BETA</param>
    /// <param name="发布版本">E_StoreMode.RTL</param>
    public static void SetStorePath(E_StoreMode mode)
    {
        if (mode == E_StoreMode.BETA)
        {
            ES3Settings.defaultSettings.directory = ES3.Directory.DataPath;
            ES3Settings.defaultSettings.path = BETA_SAVE_PATH + FILEPATH;
        }
        else if (mode == E_StoreMode.ALPHA)
        {
            ES3Settings.defaultSettings.directory = ES3.Directory.DataPath;
            ES3Settings.defaultSettings.path = ALPHA_SAVE_PATH + FILEPATH;
        }
        else if(mode == E_StoreMode.RTL)
        {
            ES3Settings.defaultSettings.directory = ES3.Directory.PersistentDataPath;
            ES3Settings.defaultSettings.path = FILEPATH;
        }
    }


    #region Save

    /// <summary>
    /// 数据保存 默认地址路径为 Assest/SaveDatas/
    /// </summary>
    /// <param name="key / value">可存储任意对象,初字节数组外需要调用 SaveBytes 方法 </param>
    /// <param name="filePath">默认保存在"neon_data.es3"中,根据需要自定义</param>
    /// <param name="settings">根据需要 settings = new ES3Settings(ES3.EncryptionType.AES, "myPassword");</param>
    public static void Save(string key, object value, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.Save<object>(key, value, setting);
    }

    /// <summary>
    /// 数据保存 默认地址路径为 Assest/SaveDatas/
    /// </summary>
    /// <param name="key / value">可存储任意对象,初字节数组外需要调用 SaveBytes 方法 </param>
    /// <param name="filePath">默认保存在"neon_data.es3"中,根据需要可自定义</param>
    /// <param name="settings">根据需要 settings = new ES3Settings(ES3.EncryptionType.AES, "myPassword");</param>
    public static void Save<T>(string key, T value, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.Save<T>(key, value, setting);
    }

    // 字节数组
    public static void SaveBytes(byte[] bytes, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.SaveRaw(bytes, setting);
    }

    public static void SaveBytes(string str, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        var bytes = setting.encoding.GetBytes(str);
        ES3.SaveRaw(bytes, setting);
    }

    // 追加数据
    public static void AppendBytes(byte[] bytes, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.AppendRaw(bytes, setting);
    }

    public static void AppendBytes(string str, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.AppendRaw(str, setting);
    }

    // 保存Image
    public static void SaveImage(Texture2D texture, int quality = 75, string imagePath = null,
        ES3Settings settings = null)
    {
        var setting = new ES3Settings(imagePath, settings);
        ES3.SaveImage(texture, quality, setting);
    }

    #endregion

    #region Load

    public static object Load(string key, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.Load<object>(key, setting);
    }

    public static T Load<T>(string key, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.Load<T>(key, setting);
    }

    public static object Load(string key, object defaultValue, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.Load<object>(key, defaultValue, setting);
    }

    public static T Load<T>(string key, T defaultValue, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.Load<T>(key, defaultValue, setting);
    }

    // LoadInto

    public static void LoadInto(string key, object obj, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.LoadInto<object>(key, obj, setting);
    }

    public static void LoadInto<T>(string key, T obj, string filePath = null, ES3Settings settings = null)
        where T : class
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.LoadInto<T>(key, obj, setting);
    }


    // 字节数组
    public static byte[] LoadRawBytes(string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.LoadRawBytes(setting);
    }

    public static string LoadRawString(string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        var bytes = ES3.LoadRawBytes(setting);
        return setting.encoding.GetString(bytes, 0, bytes.Length);
    }

    public static Texture2D LoadImage(string imagePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(imagePath, settings);
        return ES3.LoadImage(setting);
    }

    public static Texture2D LoadImage(byte[] bytes)
    {
        var texture = new Texture2D(1, 1);
        texture.LoadImage(bytes);
        return texture;
    }

    public static AudioClip LoadAudio(string audioFilePath, ES3Settings settings = null)
    {
        var setting = new ES3Settings(null, settings);
        return ES3.LoadAudio(audioFilePath, AudioType.UNKNOWN, setting);
    }

    #endregion

    #region Serialize/Deserialize

    public static byte[] Serialize<T>(T value, ES3Settings settings = null)
    {
        return ES3.Serialize(value, settings);
    }

    public static T Deserialize<T>(byte[] bytes, ES3Settings settings = null)
    {
        return ES3.Deserialize<T>(bytes, settings);
    }

    public static void DeserializeInto<T>(byte[] bytes, T obj, ES3Settings settings = null) where T : class
    {
        ES3.DeserializeInto(ES3TypeMgr.GetOrCreateES3Type(typeof(T)), bytes, obj, settings);
    }

    public static void DeserializeInto<T>(ES3Types.ES3Type type, byte[] bytes, T obj, ES3Settings settings = null)
        where T : class
    {
        ES3.DeserializeInto<T>(type, bytes, obj, settings);
    }

    #endregion

    #region Encrypt/Decrypt (bytes/string)

    public static byte[] EncryptBytes(byte[] bytes, string password = null)
    {
        return ES3.EncryptBytes(bytes, password);
    }

    public static byte[] DecryptBytes(byte[] bytes, string password = null)
    {
        return ES3.DecryptBytes(bytes, password);
    }

    public static string EncryptString(string str, string password = null)
    {
        var encoding = ES3Settings.defaultSettings.encoding;
        byte[] bytes = encoding.GetBytes(str);
        byte[] res = ES3.EncryptBytes(bytes, password);
        return encoding.GetString(res);
    }

    public static string DecryptString(string str, string password = null)
    {
        var encoding = ES3Settings.defaultSettings.encoding;
        byte[] bytes = encoding.GetBytes(str);
        byte[] res = ES3.DecryptBytes(bytes, password);
        return encoding.GetString(res);
    }

    #endregion

    #region Delete

    public static void DeleteFile(string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.DeleteFile(setting);
    }

    public static void DeleteDirectory(string directoryPath, ES3Settings settings = null)
    {
        var setting = new ES3Settings(directoryPath);
        ES3.DeleteDirectory(setting);
    }

    public static void DeleteKey(string key, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        ES3.DeleteKey(key, setting);
    }

    #endregion

    #region Get/Exists

    public static bool KeyExists(string key, string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.KeyExists(key, setting);
    }

    public static bool FileExists(string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.FileExists(setting);
    }

    public static bool DirectoryExists(string folderPath, ES3Settings settings = null)
    {
        var setting = new ES3Settings(folderPath, settings);
        return ES3.DirectoryExists(setting);
    }

    public static string[] GetKeys(string filePath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(filePath, settings);
        return ES3.GetKeys(setting);
    }

    public static string[] GetFiles(string directoryPath = null, ES3Settings settings = null)
    {
        ES3Settings setting;
        if (directoryPath == null)
        {
            setting = new ES3Settings();
            if (setting.location == ES3.Location.File)
            {
                if (setting.directory == ES3.Directory.PersistentDataPath)
                    setting.path = Application.persistentDataPath;
                else
                    setting.path = Application.dataPath;
            }
        }
        else
        {
            setting = new ES3Settings(directoryPath, settings);
        }

        return ES3.GetFiles(setting);
    }

    public static string[] GetDirectories(string directoryPath = null, ES3Settings settings = null)
    {
        var setting = new ES3Settings(directoryPath, settings);
        return ES3.GetDirectories(setting);
    }

    #endregion
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity EasySave3封装管理类 的相关文章

  • c#获取cpu序列号

  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • Unity中实现倒计时的几种方式

    1 Time time using UnityEngine public class TimeTest MonoBehaviour public float secound 10 void Update Timing private flo
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • Unity 键盘控制人物移动——之输入方式代码的编写

    键盘输入 控制人物移动 在我们制作游戏中最常见的需求之一就是使用键盘移动游戏角色 那么我们首先需要获取键盘输入 以下提供两种方法获取键盘 这里尽量通过截图解释让大家理解代码的含义 GetInput void FixedUpdate Move
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • unity3d 自定义的图片无法放入source image中

    须将图片的texture type改为 sprite
  • unity3d image组件不显示

    需要将UI组件放到画布下面
  • mixamo根动画导入UE5问题:滑铲

    最近想做一个跑酷游戏 从mixamo下载滑铲动作后 出了很多动画的问题 花了两周时间 终于是把所有的问题基本上都解决了 常见问题 1 动画序列 人物不移动 2 动画序列 人物移动朝向错误 3 蒙太奇 人物移动后会被拉回 4 蒙太奇 动画移动
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理之角色选择一

    进入游戏后 我们经常会进入角色选择的界面 通常是左右两个按钮可以更改角色供玩家选择 对于这种界面我们通常使用数据持久化将角色信息存储起来 接下来的笔记中 我将使用自带的数据持久化系统对其进行操作 实现角色的选择页面 后续会更新xml系列的文
  • 游戏开发中常见系统梳理之背包系统的实现一

    游戏中几乎都存在大大小小的背包系统 接下来我将讲述背包系统具体是如何实现的 完整源码 以下是使用unity NGUI实现 使用txt配置的方法 后续更新UGUI Json实现的背包系统敬请期待 背包中的物品我们常常将其制作成预设体 通过改变

随机推荐

  • 【STM32】标准库 菜鸟入门教程(1)初识最小系统

    前言 本教程突出两个字 细 和 简 也就是详细跟简洁 所用知识涉及到的原理会详细讲明 再而 在排版以及描述上会采取简约风格 进行实例讲解的时候 包含图片过程以及文字过程两部分 因此适合小菜鸟入门 本次使用的是stm32f103c8t6也就是
  • VIM 快捷键(转)

    VIM快捷键 ctags 文件名 做索引 光标移动 四个方向 k h 0 l j ctrl f ctrl b 向下翻页 向上翻页 ctrl d ctrl u 向下半翻页 向上半翻页 移动行尾 0 移动行首 w 移动下一个词 b 移动到上一个
  • 树莓派Raspbian系统安装tesseract-ocr实现OCR

    第一步安装依赖 启动终端依次敲入命令 sudo apt get install g or clang presumably sudo apt get install autoconf automake libtool sudo apt ge
  • 基于matlab的dbn算法实现

    下载deeplearningtoolbox或者本人提交的zip文件包即可直接运行 command window运行以下程序 function test example DBN load mnist uint8 train x double
  • java毕业设计开题报告javaweb敬老院管理系统的设计和实现

    文末获取联系 一 项目介绍 javaweb基于Java的敬老院管理系统的设计和实现 该项目采用技术jsp servlet jdbc tomcat服务器 mysql数据库 项目含有源码 论文 配套开发软件 软件安装教程 项目发布教程 一 选题
  • Vue插槽

    Vue插槽 Vue的组件如何接受模板内容呢 在某些场景中 我们可能想要为子组件传递一些模板片段 让子组件在它们的组件中渲染这些片段 这时我们可以使用vue提供的插槽来实现 例子 父元素提供了一个模板
  • USB基本知识

    USB协议版本有USB1 0 USB1 1 USB2 0 USB3 0等 目前用的比较多的是USB2 0和USB3 0 1 USB2 0总线 USB2 0总线采用4芯的屏蔽线 一对差分线 D D 传输信号 另一对 VBUS 电源线 传输 5
  • Spring全家桶知识概括

    Spring全家桶知识概括 Springmvc与JS 拦截器与过滤器的区别 spring容器 spring MVC容器 web容器的区别 Filter与Servlet路径映射问题 Spring与JUnit SpringBoot测试与Mock
  • QCefView + QWebChannel + Vue 项目开发

    看到标题 你大概能猜到这篇我想讲述的是什么了 对的 将要同大家分享的是一种目前PC软件常见的开发方案 前言 1 桌面应用为什么要使用Vue等框架开发 而不再是Qt UI开发 界面开发我们使用java语言 通过Vue框架快速开发 好处不言而喻
  • 使用html2canvas实现HTML页面的echarts图表转成长图片

    import html2canvas from html2canvas downLoad url var oA document createElement a oA download 设置下载的文件名 默认是 下载 oA href url
  • 字符和字符串(4)——C# 截取字符串:简单易懂,小白教程

    几个经常用到的字符串的截取 string str 123abc456 int i 3 取字符串的前i个字符 str str Substring 0 i or str str Remove i str Length i 去掉字符串的前i个字符
  • web3.js

    安装 别按照官网上面 npm install web3 下载 我已经吃过一次亏了 npm init npm install ethereum web3 js save 指令 web3 isConnected 检查结点的连接是否存在 web3
  • 知识蒸馏研究综述

    知识蒸馏研究综述 论文来源于 知识蒸馏研究综述 文章目录 知识蒸馏研究综述 知识蒸馏的提出 知识蒸馏的作用机制 蒸馏的知识形式 输出特征知识 中间特征知识 知识蒸馏的方法 知识合并 多教师学习 教师助理 跨模态蒸馏 相互蒸馏 终身蒸馏 自蒸
  • XSS闯关——第三关:level3

    第三关 level3 看页面和第二关类似 先用第二关的输入测试 gt 可惜没有成功 毕竟是第三关 在第二关上肯定有所升级 查看当前网页的源代码分析 可以发现我们的输入被后台改成了如下内容 输入的 gt lt 被做了转义处理 变成了 quot
  • 安卓开发课程设计报告

    湖南科技大学计算机科学与工程学院 综合实践能力创新实训 安卓开发课程设计报告 题 目 新 闻 客 户 端 学 号 17050103XX 姓 名 白马 完成时间 2019年12月15日 安卓开发 新闻客户端 1 设计要求 1 1 技术平台要求
  • 宝藏级的开源小程序(APP)商城-CRMEBPC版前台和手机版实测

    公司最近想新上一个项目 用APP对线下门店地推做产品推广 开始我们想找个研发APP公司来做一个简易APP来的 结果打了十来通电话 基本上报价都是在三万到五万之间 而公司又恰恰在起步阶段 所以就考虑放弃了自己开发 目光转向到了微信商城 可看完
  • Python 类内直接定义属性与self.属性名的区别

    class A test value1 value1 self test value3 value3 报错 无法定义 因为self代表的是类对象 def int self self test value2 value2 if name ma
  • GT--记录android app消耗的cpu/内存/流量 /电量

    腾讯GT简介 此apk是一款可以对APP进行测试的软件 可以在任何情况下快速测试手机app的CPU 内存 流量 电量 帧率 流畅度等性能测试 有安卓版本和ios版本 分别下载 1 下载腾讯GT http gt tencent com dow
  • torch 中的detach、numel、retain_graph、repeat、repeat_interleave等参数的用法

    detach 官网解释 实验结论 import torch x torch arange 4 0 x requires grad True 等价于 x torch arange 4 0 requires grad True y x x de
  • Unity EasySave3封装管理类

    20230804 新增 加密处理接口