博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D笔记十九 持久化数据
阅读量:4953 次
发布时间:2019-06-12

本文共 5247 字,大约阅读时间需要 17 分钟。

1PlayerPrefs(生命周期???)

1.1 保存与读取数据

  在C#中类似缓存、CookieSession等保存数据的,但是有点区别的是在C#中如果在取值时没有取到默认值则返回值是NULL,但Unity中如GetInt("Test", 100); 在取值Test时如果没有默认值则直接返回的是100

  在Unity中提供了一个用于本地持久化保存与读取数据的类——PlayerPrefs 是轻量级的存储。它的工作原理是以哈希、字典的方式:键值对的形式将数据保存在文件中。

PlayerPrefs类可保存与读取3种基本的数据类型:浮点型、整型和字符串型。

  SetFloat():保存浮点类型。

  SetInt():保存整型。

  SetString():保存字符串。

  GetFloat():获取浮点类型。

  GetInt():获取整型。

  GetString():获取字符串。

Eg

//保存整型

PlayerPrefs.SetInt("Test", 100); 

//获取整型

PlayerPrefs.GetInt("Test", 100); 

 

1.2 删除数据

删除数据方法:

  a、根据键删除值:DeleteKey(),删除之前先判断是否存在HasKey()

 

  b、删除所有数据:DeleteAll()

 

1.3 注册界面

_8_1.cs

using UnityEngine;using System.Collections;/// /// 注册/// public class _8_1 : MonoBehaviour{    ///     /// 用户姓名    ///     private string userName = string.Empty;    ///     /// 用户号码    ///     private string userPhone = string.Empty;    ///     /// 用户年龄    ///     private string userAge = string.Empty;    ///     /// 用户身高    ///     private string userHight = string.Empty;    ///     /// 是否将信息显示    ///     private bool isShowInfo = false;    void OnGUI()    {        GUILayout.BeginHorizontal("box", GUILayout.Width(200));        GUILayout.Label("请输入姓名");        userName = GUILayout.TextField(userName, 10);        GUILayout.EndHorizontal();// [hɒrɪ'zɒnt(ə)l]adj. 水平的;地平线的;同一阶层的        GUILayout.BeginHorizontal("box");        GUILayout.Label("请输入号码");        userPhone = GUILayout.TextField(userPhone, 11);        GUILayout.EndHorizontal();        GUILayout.BeginHorizontal("box");        GUILayout.Label("请输入年龄");        userAge = GUILayout.TextField(userAge, 3);        GUILayout.EndHorizontal();        GUILayout.BeginHorizontal("box");        GUILayout.Label("请输入身高");        userHight = GUILayout.TextField(userHight, 3);        GUILayout.EndHorizontal();        if (GUILayout.Button("注册"))        {            isShowInfo = true;            #region  持久化保存数据            PlayerPrefs.SetString("userName", userName);            PlayerPrefs.SetString("userPhone", userPhone);            PlayerPrefs.SetInt("userAge", int.Parse(userAge));            PlayerPrefs.SetFloat("userHeight", float.Parse(userHight));            #endregion        }        if (GUILayout.Button("取消"))        {            isShowInfo = false;            PlayerPrefs.DeleteAll();//删除所有持久化对应值        }        if (isShowInfo)        {            GUILayout.Label("输入的姓名为:" + PlayerPrefs.GetString("userName", "姓名默认值"));            GUILayout.Label("输入的号码为:" + PlayerPrefs.GetString("userPhone", "号码默认值"));            GUILayout.Label("输入的年龄为:" + PlayerPrefs.GetInt("userAge", 0).ToString());            GUILayout.Label("输入的身高为:" + PlayerPrefs.GetFloat("userHeight", 0.0f).ToString());        }    }    // Use this for initialization    void Start()    {    }    // Update is called once per frame    void Update()    {    }}

 

 

自定义文件

2.1 文件的创建与写入 

文件的创建与写入都需要使用流来操作。

_8_2.cs

using UnityEngine;using System.Collections;using System.IO;/// /// 文件的创建与写入 /// public class _8_2 : MonoBehaviour{    // Use this for initialization    void Start()    {        //创建文件,共写入3次数据        CreateFile(Application.dataPath, "FileName", "TestInfo0");        CreateFile(Application.dataPath, "FileName", "TestInfo1");        CreateFile(Application.dataPath, "FileName", "TestInfo2");     }    ///     /// 文件流    ///     /// 文件创建目录    /// 文件的名称    /// 写入的内容    void CreateFile(string path, string name, string infos)    {        StreamWriter sw;//文件流信息        FileInfo fileInfo = new FileInfo(path + "//" + name);        if (!fileInfo.Exists)        {            sw = fileInfo.CreateText();        }        else        {            sw = fileInfo.AppendText();//如果此文件存在,则打开该文件        }        sw.WriteLine(infos);        sw.Close();        sw.Dispose();    }       // Update is called once per frame    void Update()    {    }}

 

应用程序

应用程序相关的方法都写在Application类中。它可以获取或设置当前程序的一些属性,比如加载游戏关卡,获取资源文件路径,退出当前游戏程序,获取当前游戏平台等。

   OnApplicationFocus():获得焦点时表示当前游戏处于可控制状态。

    OnApplicationPause():程序暂停时表示当前游戏呈不可控制状态。 [pɔːz]n. 暂停;间歇

   OnApplicationQuit():程序退出时表示当前游戏已经退出。

3.1 创建关卡

File”→“New Scene”菜单项创建一个新关卡(同一个游戏项目中可以存在任意数量的游戏关卡)

3.2 切换关卡

File”→“Build Settings,点击右下角的“Add Current”按钮可为当前游戏关卡授权,右侧数字为关卡的ID,ID0的关卡表示程序运行时第一个进入的场景

3.3截屏

截屏操作需调用方法Application.CaptureScreenshot("name.png"),该方法的参数为截屏图片的文件名称,成功截屏后该文件将被默认保存在根目录下。 ['kæptʃə]vt. 俘获;夺得

n. 捕获;战利品,

3.4 打开网页

Application.OpenURL(“www.baidu.com”) 参数为待打开网页的完整网址

 

3.5 退出游戏

Application.Quit()方法即可退出当前游戏。需要注意的是,该方法只能在真实设备中执行,而无法在模拟器中执行。

 

4、资源数据库

AssetDatabase

4.7 实例——鼠标拣选

 

using UnityEngine;using System.Collections;/// /// 以摄像机的位置为原点,以鼠标在屏幕中选择的当前点为目标点,发射一条射线,获取这条射线终点的三维坐标系即可/// 鼠标拣选原理的应用非常广泛,比如当玩家在地图中选择一个点时,人物会朝该点移动/// public class _8_4 : MonoBehaviour{    // Use this for initialization    void Start()    {    }    // Update is called once per frame    void Update()    {        if (Input.GetMouseButtonDown(0))        {            ////创建一条从摄像机到鼠标选择的当前点的射线            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);            RaycastHit hit;            if (Physics.Raycast(ray, out hit))            {                //确定选择的点为地形后,创建立方体对象                GameObject objCube = GameObject.CreatePrimitive(PrimitiveType.Cube);                objCube.transform.position = hit.point;             }        }    }}

 

 

 

_8_4.cs

转载于:https://www.cnblogs.com/PEPE/p/3549186.html

你可能感兴趣的文章
Python3 图片转字符画
查看>>
[C陷阱和缺陷] 第7章 可移植性缺陷
查看>>
人需要治愈
查看>>
linux中configure文件默认执行结果所在位置
查看>>
Spring MVC例子
查看>>
jmeter 断言
查看>>
玩玩小爬虫——抓取时的几个小细节
查看>>
error C4996: 'fopen'
查看>>
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>