Unity PlayerPrefs
对于游戏存档,储存最高分,排行榜都需要用到储存,现在存储的方式有很多,可以存本地的Json,XML,Sqlite,还有一种就是unity自带的一种存储PlayerPrefs。
那么这个PlayerPrefs如何使用呢?
其实很简单,官方的API是里介绍了:
1、PlayerPrefs可以理解为持久化储存,还可以理解为游戏存档, 玩RPG游戏的时候肯定会有游戏存档 存档中就会记录玩家以前游戏的过程,这些都是以数据的形式存在PlayerPrefs中的。
2、在Mac OS X上PlayerPrefs存储在~/Library/PlayerPrefs文件夹,名为unity.[company name].[product name].plist,这里company和product名是在Project Setting中设置的,相同的plist用于在编辑器中运行的工程和独立模式.
3、在Windows独立模式下,PlayerPrefs被存储在注册表的 HKCU\Software\[company name]\[product name]键下,这里company和product名是在Project Setting中设置的.
4、在Web模式,PlayerPrefs存储在Mac OS X的二进制文件 ~/Library/Preferences/Unity/WebPlayerPrefs中和Windows的 %APPDATA%\Unity\WebPlayerPrefs中,一个游戏存档文件对应一个web播放器URL并且文件大小被限制为1MB。如果超出这个限制,SetInt、 SetFloat和SetString将不会存储值并抛出一个PlayerPrefsException。
Class Functions类函数
-
Sets the value of the preference identified by key.
设置由key确定的参数值。 -
Returns the value corresponding to key in the preference file if it exists.
如果存在,返回偏好文件中key对应的值。 -
Sets the value of the preference identified by key.
设置由key确定的参数值。 -
Returns the value corresponding to key in the preference file if it exists.
如果存在,返回游戏存档文件中key对应的值。 -
Sets the value of the preference identified by key.
设置由key确定的参数值。 -
Returns the value corresponding to key in the preference file if it exists.
如果存在,返回游戏存档文件中key对应的值。 -
Returns true if key exists in the preferences.
如果key在游戏存档中存在,返回true。 -
Removes key and its corresponding value from the preferences.
从游戏存档中删除key和它对应的值。 -
Removes all keys and values from the preferences. Use with caution.
从偏好中删除所有key。请谨慎使用。 -
Writes all modified preferences to disk.
写入所有修改参数到硬盘。
这个是可以理解到PlayerPrefs的存储是有局限的,在unty3D中只支持int,string,float三种数据类型的写和读。
代码很简单:
//保存数据
PlayerPrefs.SetString("Name",mName);
PlayerPrefs.SetInt("Age",mAge);
PlayerPrefs.SetFloat("Grade",mGrade)
//读取数据
mName=PlayerPrefs.GetString("Name","DefaultValue");
mAge=PlayerPrefs.GetInt("Age",);
mGrade=PlayerPrefs.GetFloat("Grade",0F);
这里我们可以得出:
1、unity3D中的数据持久化是以键值对的形式存储的,可以看做一个字典。
2、unity3D中的值通过键名来读取的,当值不存在时,返回默认值。
下面通过一个例子来学习:
第一步,新建一个场景scene1,给其添加脚本,我这里是挂在摄像机上了。用于保存数据。
using UnityEngine;
using System.Collections; public class Scene1Script : MonoBehaviour {
//姓名
private string mName="路人甲";
//年龄
private int mAge=;
//成绩
private float mGrade=75.5F;
void OnGUI()
{ GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height());
//姓名
GUILayout.Label("请输入姓名:",GUILayout.Height());
mName=GUILayout.TextField(mName,GUILayout.Height());
//年龄
GUILayout.Label("请输入年龄:",GUILayout.Height());
mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height()));
//成绩
GUILayout.Label("请输入成绩:",GUILayout.Height());
mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height()));
//提交数据
if (GUILayout.Button("提交数据", GUILayout.Height()))
{
//保存数据
PlayerPrefs.SetString("Name", mName); PlayerPrefs.SetInt("Age", mAge); PlayerPrefs.SetFloat("Grade", mGrade);
//切换到新场景
Application.LoadLevel();
}
}
}
保存一下,新建场景scene2,同样给给其挂一个脚本用于读取数据。
using UnityEngine;
using System.Collections; public class Scene2Script : MonoBehaviour {
private string mName;
private int mAge;
private float mGrade;
void Start ()
{
//读取数据
mName=PlayerPrefs.GetString("Name","DefaultValue");
mAge=PlayerPrefs.GetInt("Age",);
mGrade=PlayerPrefs.GetFloat("Grade",0F);
}
void OnGUI()
{
GUILayout.Label("Unity3D数据存储示例程序",GUILayout.Height());
//姓名
GUILayout.Label("姓名:"+mName,GUILayout.Height());
//年龄
GUILayout.Label("年龄:"+mAge,GUILayout.Height());
//成绩
GUILayout.Label("成绩:"+mGrade,GUILayout.Height());
//删除数据
if(GUILayout.Button("清除数据",GUILayout.Height()))
{
PlayerPrefs.DeleteAll();
}
//返回Scene0
if(GUILayout.Button("返回场景",GUILayout.Height()))
{
Application.LoadLevel();
}
}
}
保存场景,在BuidingSetting里添加场景。运行scene1,可以跳转到scene2里,数据就显示出来了,scene2里点击清除,再打开scene2就会出现默认的值

点击提交数据:

点击清除数据,再重新打开scene2,

原文链接:http://blog.csdn.net/yeluo_vinager/article/details/50074461
Unity PlayerPrefs的更多相关文章
- Unity PlayerPrefs 存储的位置
Mac OS 在Mac OS X上PlayerPrefs是存储在~/Library/Preferences文件夹,名为unity.[company name].[product name].plist ...
- c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来
在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 我的理解是通过某个特殊的标签来保存在本地,而且该标签为key的意思,初始值不用赋值. 在游戏开发中较为实用. 暂时用到了 Se ...
- Unity PlayerPrefs类进行扩展(整个对象进行保存)
盘子脸在制作单机游戏的时候,先以为没有好多数据需要保存本地. 就没有使用json等格式自己进行保存. 使用PlayerPrefs类,但是后面字段越来越多的时候. PlayerPrefs保存就发现要手动 ...
- unity, PlayerPrefs.GetInt(key,defaultValue)
PlayerPrefs.GetInt(key,defaultValue)中的defaultValue参数非常有用,因为玩家第一次玩的时候存档还没有建立.所以需要使用defaultValue参数,相当于 ...
- 转:Oculus Unity Development Guide开发指南(2015-7-21更新)
http://forum.exceedu.com/forum/forum.php?mod=viewthread&tid=34175 Oculus Unity Development Guide ...
- Unity 3D 之Playerprefs
Unity3d提供了一个用于本地持久化保存与读取的类——PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. 一.PlayerPre ...
- Unity本地持久化类Playerprefs使用详解
一.PlayerPrefs是什么? PlayerPrefs是Unity3d提供了一个用于数据本地持久化保存与读取的类.工作原理十分简单,就是以key-value的形式将数据保存在本地,然后在代码中可以 ...
- unity文件 PlayerPrefs.SetInt 保存 And PlayerPrefs.GetInt读取
unity文件保存读取PlayerPrefs.SetInt And PlayerPrefs.GetInt using UnityEngine; using System.Collections; ...
- Unity 游戏存档 PlayerPrefs类的用法
unity3d提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的形式将数据保存在文件中,然后程序可以根据这个名称取出上次保存的数值. PlayerPr ...
随机推荐
- nginx实现防盗链配置方法介绍
有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等. 防盗链配置 假设网站域名是 www.php100.com. 编辑 ...
- 自定义echart tooltip格式
formatter: function (tipData) { return tipData[0].name + '</br>' + '<span style="displ ...
- 没办法,SVD就讲的这么好
2)奇异值: 下面谈谈奇异值分解.特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有N个学生,每个学生有M科成绩,这样形成的一个 ...
- k8s 基础 核心概念
Pod pod是若干相关容器的集合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间,ip地址和端口,相互之间能通过localhost来发现和通信.另外,这些容器还可共享一块存储空 ...
- VMware安装Ubuntu时出现Intel VT-X处于禁用状态的情况的处理办法
VMware安装Ubuntu时出现Intel VT-X处于禁用状态的情况的处理办法 VMware安装Ubuntu的出现Intel VT-X处于禁用状态的情况会使已经安装好的Ubuntu虚拟机打不开 ...
- 【eclipse-js验证】
第一步:去除eclipse的JS验证:将windows->preference->Java Script->Validator->Errors/Warnings->Ena ...
- 开发一个android项目后的总结
首先是自己在OneNote上面记录了一些流水: 个人感觉这一路开发下来,学到了一些知识,也碰到了许许多多的问题,也解决了一些问题.总体来看,有几点(个人观点,不支持任何讨论): 1.Java是很优秀的 ...
- C# 外观模式
外观模式(Facade Pattern) 介绍 定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.使用外观模式时,创建了一个统一的类,用来 ...
- 解决Navicat 连接服务器数据库报10060问题
1.登录mysql,授予远程登录权限(确保mysql表里的登录user对应的host为 % 即可:若不是 % ,使用mysql的update更新对应host) mysql> use mysql; ...
- 洛谷P1066 2^k进制数
P1066 2^k进制数 题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ( ...