Unity3D笔记十九 持久化数据
1、PlayerPrefs类(生命周期???)
1.1 保存与读取数据
在C#中类似缓存、Cookie、Session等保存数据的,但是有点区别的是在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; /// <summary>
/// 注册
/// </summary>
public class _8_1 : MonoBehaviour
{ /// <summary>
/// 用户姓名
/// </summary>
private string userName = string.Empty;
/// <summary>
/// 用户号码
/// </summary>
private string userPhone = string.Empty;
/// <summary>
/// 用户年龄
/// </summary>
private string userAge = string.Empty;
/// <summary>
/// 用户身高
/// </summary>
private string userHight = string.Empty;
/// <summary>
/// 是否将信息显示
/// </summary>
private bool isShowInfo = false; void OnGUI()
{
GUILayout.BeginHorizontal("box", GUILayout.Width());
GUILayout.Label("请输入姓名");
userName = GUILayout.TextField(userName, );
GUILayout.EndHorizontal();// [hɒrɪ'zɒnt(ə)l]adj. 水平的;地平线的;同一阶层的 GUILayout.BeginHorizontal("box");
GUILayout.Label("请输入号码");
userPhone = GUILayout.TextField(userPhone, );
GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box");
GUILayout.Label("请输入年龄");
userAge = GUILayout.TextField(userAge, );
GUILayout.EndHorizontal(); GUILayout.BeginHorizontal("box");
GUILayout.Label("请输入身高");
userHight = GUILayout.TextField(userHight, );
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", ).ToString());
GUILayout.Label("输入的身高为:" + PlayerPrefs.GetFloat("userHeight", 0.0f).ToString());
}
} // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{ }
}
2 自定义文件
2.1 文件的创建与写入
文件的创建与写入都需要使用流来操作。
_8_2.cs
using UnityEngine;
using System.Collections;
using System.IO;
/// <summary>
/// 文件的创建与写入
/// </summary>
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");
}
/// <summary>
/// 文件流
/// </summary>
/// <param name="path">文件创建目录</param>
/// <param name="name">文件的名称</param>
/// <param name="infos">写入的内容</param>
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()
{ }
}
3 应用程序
应用程序相关的方法都写在Application类中。它可以获取或设置当前程序的一些属性,比如加载游戏关卡,获取资源文件路径,退出当前游戏程序,获取当前游戏平台等。
OnApplicationFocus():获得焦点时表示当前游戏处于可控制状态。
OnApplicationPause():程序暂停时表示当前游戏呈不可控制状态。 [pɔːz]n. 暂停;间歇
OnApplicationQuit():程序退出时表示当前游戏已经退出。
3.1 创建关卡
“File”→“New Scene”菜单项创建一个新关卡(同一个游戏项目中可以存在任意数量的游戏关卡)
3.2 切换关卡
“File”→“Build Settings”,点击右下角的“Add Current”按钮可为当前游戏关卡授权,右侧数字为关卡的ID,ID为0的关卡表示程序运行时第一个进入的场景
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;
/// <summary>
/// 以摄像机的位置为原点,以鼠标在屏幕中选择的当前点为目标点,发射一条射线,获取这条射线终点的三维坐标系即可
/// 鼠标拣选原理的应用非常广泛,比如当玩家在地图中选择一个点时,人物会朝该点移动
/// </summary>
public class _8_4 : MonoBehaviour
{ // Use this for initialization
void Start()
{ } // Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown())
{
////创建一条从摄像机到鼠标选择的当前点的射线
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
Unity3D笔记十九 持久化数据的更多相关文章
- python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法
python3.4学习笔记(十九) 同一台机器同时安装 python2.7 和 python3.4的解决方法 同一台机器同时安装 python2.7 和 python3.4不会冲突.安装在不同目录,然 ...
- (C/C++学习笔记) 十九. 模板
十九. 模板 ● 模板的基本概念 模板(template) 函数模板:可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体设计. 语法: template <<模 ...
- (三十九)数据的持久化存储-plist实现(XML属性表)
iOS应用数据存储的常用方式: 归档:用某种格式保存数据. XML属性列表(plist)归档(持久化) Preference 偏好设置 NSKeyedArchiver归档 SQLite3 数据库 效率 ...
- Java基础学习笔记十九 IO
File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...
- Java基础学习笔记十九 File
IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把这些数据 ...
- (转载)西门子PLC学习笔记十五-(数据块及数据访问方式)
一.数据块 数据块是在S7 CPU的存储器中定义的,用户可以定义多了数据块,但是CPU对数据块数量及数据总量是有限制的. 数据块与临时数据不同,当逻辑块执行结束或数据块关闭,数据块中的数据是会保留住的 ...
- JavaScript权威设计--跨域,XMLHttpRequest(简要学习笔记十九)
1.跨域指的是什么? URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a. ...
- MySQL学习笔记十二:数据备份与恢复
数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...
- python 学习笔记十九 django深入学习四 cookie,session
缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...
随机推荐
- scala中获取Map中key和value的方法
val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8) // 获取所有的key v ...
- QT 运行崩溃:The inferior stopped because it received a signal from the Operating System
最近在研究QT自带的boxes例子,自己派生一个图形项,但是在运行生成该图形项时程序直接退出了~ Qt Creater调试代码,问题定位如下代码行: 执行1270行时弹出错误消息框: 于是上网查找资料 ...
- python使用paramiko自动化部署linux程序
使用paramiko模块,比os模块和command模块更加的兼容各种环境.后面两个只能在服务器本机 执行,此模块写得python文件无论是在本地还是服务器本身上运行,都能兼容. paramiko模块 ...
- [转] NGUI自适应
很多做移动终端开发的童鞋都可能遇到一个问题,就是如何自适应其实NGUI已经能帮我们实现,下面就告诉大家怎么整这个自适应.1,create a new ui 2,uiroot下添加uipanel(scr ...
- ios的AutoresizingMask【转】
在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高. enum { UIViewAutoresi ...
- Uva--11324--The Largest Clique【有向图强连通分量】
链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...
- 5 -- Hibernate的基本用法 --4 2 hibernate.properties文件与hibernate.cfg.xml文件
hibernate.properties : project\etc\hibernate.properties hibernate.cfg.xml : project\etc\hibernate.cf ...
- ios开发之--字符串局部改变颜色
改变指定位置字符的颜色,代码如下: NSString *descStr = @"楼主"; NSString *nickStr = [NSString stringWithForma ...
- 安装eclipse,配置tomcat
1.去官网(https://www.eclipse.org/downloads/download.php?file=/oomph/epp/oxygen/R/eclipse-inst-win64.exe ...
- Python学习笔记(15)- os\os.path 操作文件
程序1 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: import os def countfile(path): dict1 = {} # 定义一个字典 all_files = ...