返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1836|回复: 0

[原创] 【原创】持久化存储基本讲解

[复制链接]
发表于 2022-11-3 15:33:57 | 显示全部楼层 |阅读模式
//PlayerPrefs_Script.cs

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

public class PlayerPrefs_Script : MonoBehaviour
{
    #region 持久化数据理论讲解段
    /*持久化数据讲解 PlayerPrefs (PC、IOS、Android可用)
     *
     * PlayerPrefs类介绍
     * · Unity提供了一个本地持久化保存与读取数据的类--PlayerPrefs.它的工作原理是以键值对的形式将数据保存在文件中,
     *   这就好比给需要保存每一个数据赋予一个名称,将其成功存入本地存档中,程序就可以根据这个名称取出上次存储的数据
     *   
     *   保存与读取数据
     *   PlayerPrefs类可保存和读取3种基本的数据类型,它们是浮点型、整形和字符串类型,涉及的方法如下
     *   · SetFloat()  保存浮点型
     *   · SetInt()  保存整形
     *   · SetString()  保存字符串
     *   · GetFloat()  获取浮点类型
     *   · GetInt()  获取整形
     *   · GetString()  获取字符串
     *   
     *   简单案例:
     *      //保存整数
     *      PlayerPrefs.SetInt("分数",100);
     *      
     *      //读取数据
     *      PlayerPrefs.GetInt("分数");
     *      
     *  
    */

    /* 讲解段以下开始注释
    //记录分数的变量
    private int fsNum;

    //游戏开始时检测存储中是否有"分数"键 ,有的话则执行分数变量覆盖,等于读档了
    private void Start()
    {
        //判断存储中是否有"分数"键
        if (PlayerPrefs.HasKey("分数"))
        {
            //获取"分数"键对应的值,并赋值给fsNum
            fsNum = PlayerPrefs.GetInt("分数");
        }
    }

    private void OnGUI()
    {
        GUILayout.Label("分数为:" + fsNum);

        if (GUILayout.Button("点击记录分数"))
        {
            fsNum++;
        }
        if (GUILayout.Button("点击保存分数并进入下一关"))
        {
            //存储分数
            PlayerPrefs.SetInt("分数", fsNum);
            print("保存成功,分数为:"+ fsNum);

            //下一关场景切换
            //SceneManager.LoadScene 参数给的是 发布游戏时,设置的场景顺序索引 或者常用的是指定场景名(指定场景名是必须一致!!)
            SceneManager.LoadScene("Start");
        }
        if (GUILayout.Button("点击清空分数"))
        {
            //清空所有的持久化存储
            //PlayerPrefs.DeleteAll();

            //清空对应的键的持久化存储
            PlayerPrefs.DeleteKey("分数");
            fsNum = 0;
            print("已清除分数!!");
        }      
    }

    讲解段结束
    */

    #endregion

    #region 持久化实际游戏案例--脚本挂在人物模型的父物体上

    /* 持久化实际游戏案例--脚本挂在人物模型的父物体上
     *
     * 案例1:任务换装备(服装)
     *  1.制作一个开始界面分别有三个可以更换角色服装的按钮,并让用户点击选择更换某个服装
     *  2.点击“保存并进入游戏”,按钮即可进入正式的游戏场景,在游戏场景诞生角色,并且,角色身上的装备(服装)是在开始界面保存的装备效果。
     *
     */

    //定义人物现有的服装变量--材质球类型
    public Material cloth;

    //定义所有的服装数组--材质类型,需要在unity面板操作挂载
    public Texture[] allCloth = new Texture[4];
    //public Material[] allCloth = new Material[4];

    private void Start()
    {
        //获取当前人物的材质球组件
        cloth = this.GetComponentInChildren<SkinnedMeshRenderer>().material;

        //游戏开始时先清空存储缓存
        PlayerPrefs.DeleteKey("Cloth");
    }


    private void OnGUI()
    {
        GUILayout.Label("现在的服装名是: " + cloth.mainTexture.name);

        if (GUILayout.Button("换装1"))
        {
            //更换材质
            cloth.mainTexture = allCloth[0];

            //存储更换的数组位置
            PlayerPrefs.SetInt("Cloth",0);
        }
        if (GUILayout.Button("换装2"))
        {
            cloth.mainTexture = allCloth[1];
            PlayerPrefs.SetInt("Cloth", 1);
        }
        if (GUILayout.Button("换装3"))
        {
            cloth.mainTexture = allCloth[2];
            PlayerPrefs.SetInt("Cloth", 2);
        }
        if (GUILayout.Button("换回原始的服装"))
        {
            cloth.mainTexture = allCloth[3];
            PlayerPrefs.SetInt("Cloth", 3);
        }
        if (GUILayout.Button("保存进入下一关"))
        {
            //下一关场景切换
            //SceneManager.LoadScene 参数给的是 发布游戏时,设置的场景顺序索引 或者常用的是指定场景名(指定场景名是必须一致!!)



            SceneManager.LoadScene("Start");
        }

    }


    #endregion
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表