Unity3D游戲開發(fā)數(shù)據(jù)持久化PlayerPrefs的用法詳解
小編今天研究了在Unity3D中的數(shù)據(jù)持久化問題。數(shù)據(jù)持久化在任何一個(gè)開發(fā)領(lǐng)域都是一個(gè)值得關(guān)注的問題,小到一個(gè)應(yīng)用中配置文件的讀寫,大到數(shù)據(jù)庫(kù)的管理維護(hù),都可以看到數(shù)據(jù)持久化的身影。小編在《C#基于Linq和反射實(shí)現(xiàn)數(shù)據(jù)持久化框架Xml4DB》這篇文章中曾介紹了博主在寒假期間開發(fā)的Xml4DB框架,這是一個(gè)基于Xml的輕量級(jí)數(shù)據(jù)持久化框架,可以采用面向?qū)ο蟮姆绞絹?lái)處理數(shù)據(jù)。數(shù)據(jù)持久化從某種意義上來(lái)說(shuō),就是序列化和反序列化化的過程。在.NET中我們可以將對(duì)象序列化為Xml、Json、二進(jìn)制。然后通過反序列化重新獲得對(duì)象。同樣,在Android中我們可以通過使用Preferences來(lái)存儲(chǔ)鍵值型數(shù)據(jù)來(lái)實(shí)現(xiàn)數(shù)據(jù)持久化(當(dāng)然還有其它的方式,這里只是為了強(qiáng)調(diào)鍵值型數(shù)據(jù))。那么,在Unity3D中如何實(shí)現(xiàn)數(shù)據(jù)持久化呢?請(qǐng)大家跟隨我一起走進(jìn)今天的文章:[Unity3D]Unity3D游戲開發(fā)之?dāng)?shù)據(jù)持久化PlayerPrefs的使用
首先我們來(lái)看兩段Unity3D中實(shí)現(xiàn)數(shù)據(jù)讀寫的簡(jiǎn)單代碼吧:
//保存數(shù)據(jù) PlayerPrefs.SetString("Name",mName); PlayerPrefs.SetInt("Age",mAge); PlayerPrefs.SetFloat("Grade",mGrade)
//讀取數(shù)據(jù) mName=PlayerPrefs.GetString("Name","DefaultValue"); mAge=PlayerPrefs.GetInt("Age",0); mGrade=PlayerPrefs.GetFloat("Grade",0F);
通過上面兩段代碼,我們可以發(fā)現(xiàn)兩點(diǎn):
1、Unity3D中的數(shù)據(jù)持久化是以鍵值的形式存儲(chǔ)的,可以看作是一個(gè)字典。
2、Unity3D中值是通過鍵名來(lái)讀取的,當(dāng)值不存在時(shí),返回默認(rèn)值。
目前,在Unity3D中只支持int、string、float三種數(shù)據(jù)類型的讀取,所以我們可以使用這三種數(shù)據(jù)類型來(lái)存儲(chǔ)簡(jiǎn)單的數(shù)據(jù)。目前Unity3D中用于數(shù)據(jù)持久化的類為layerPrefs,主要的類方法有:
static function DeleteAll(): void 描述:從設(shè)置文件中移除所有鍵和值,謹(jǐn)慎的使用它們。 static function DeleteKey(key: string): void 描述:從設(shè)置文件中移除key和它對(duì)應(yīng)的值。 static function GetFloat(key: string, defaultValue: float=OF): float 描述:如果存在,返回設(shè)置文件中key對(duì)應(yīng)的值.如果不存在,它將返回defaultValue。 static function GetInt(key: string, defaultValue: int): int 描述:返回設(shè)置文件中key對(duì)應(yīng)的值,如果存在.如果不存在,它將返回defaultValue。 static function GetString(key: string, defaultValue: string=**): string 描述:返回設(shè)置文件中key對(duì)應(yīng)的值,如果存在.如果不存在,它將返回defaultValue. static function HasKey(key: string): bool 描述:在設(shè)置文件如果存在key則返回真. static function SetFloat(key: string, value: float): void 描述:設(shè)置由key確定的值. static function SetInt(key: string, value: int): void 描述:設(shè)置由key確定的值. static function SetString(key: string, value: string): void 描述:設(shè)置由key確定的值.
好了,在了解layerPrefs的主要方法后,我們以一個(gè)具體的例子來(lái)學(xué)習(xí)Unity3D中數(shù)據(jù)持久化的實(shí)現(xiàn),我們希望實(shí)現(xiàn)在一個(gè)場(chǎng)景中輸入信息以便在新場(chǎng)景中讀取信息。我們直接創(chuàng)建兩個(gè)場(chǎng)景,分別命名為Scene0、Scene1(據(jù)說(shuō)程序員數(shù)數(shù)都是從0開始的,哈哈),場(chǎng)景中保留主攝像機(jī)即可。接下來(lái)我們分別為兩個(gè)場(chǎng)景編寫腳本:
第一個(gè)場(chǎng)景的腳本:
using UnityEngine; using System.Collections; public class Scene1Script : MonoBehaviour { //姓名 private string mName="路人甲"; //年齡 private int mAge=20; //成績(jī) private float mGrade=75.5F; void OnGUI() { GUILayout.Label("Unity3D數(shù)據(jù)存儲(chǔ)示例程序",GUILayout.Height(25)); //姓名 GUILayout.Label("請(qǐng)輸入姓名:",GUILayout.Height(25)); mName=GUILayout.TextField(mName,GUILayout.Height(25)); //年齡 GUILayout.Label("請(qǐng)輸入年齡:",GUILayout.Height(25)); mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25))); //成績(jī) GUILayout.Label("請(qǐng)輸入成績(jī):",GUILayout.Height(25)); mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25))); //提交數(shù)據(jù) if(GUILayout.Button("提交數(shù)據(jù)",GUILayout.Height(25))) { //保存數(shù)據(jù) PlayerPrefs.SetString("Name",mName); PlayerPrefs.SetInt("Age",mAge); PlayerPrefs.SetFloat("Grade",mGrade); //切換到新場(chǎng)景 Application.LoadLevel("Scene1"); } } }
第二個(gè)場(chǎng)景的腳本:
using UnityEngine; using System.Collections; public class Scene2Script : MonoBehaviour { private string mName; private int mAge; private float mGrade; void Start () { //讀取數(shù)據(jù) mName=PlayerPrefs.GetString("Name","DefaultValue"); mAge=PlayerPrefs.GetInt("Age",0); mGrade=PlayerPrefs.GetFloat("Grade",0F); } void OnGUI() { GUILayout.Label("Unity3D數(shù)據(jù)存儲(chǔ)示例程序",GUILayout.Height(25)); //姓名 GUILayout.Label("姓名:"+mName,GUILayout.Height(25)); //年齡 GUILayout.Label("年齡:"+mAge,GUILayout.Height(25)); //成績(jī) GUILayout.Label("成績(jī):"+mGrade,GUILayout.Height(25)); //刪除數(shù)據(jù) if(GUILayout.Button("清除數(shù)據(jù)",GUILayout.Height(25))) { PlayerPrefs.DeleteAll(); } //返回Scene0 if(GUILayout.Button("返回場(chǎng)景",GUILayout.Height(25))) { Application.LoadLevel("Scene0"); } } }
我們這里直接將腳本綁定到攝像機(jī)上,然后將項(xiàng)目編譯,注意將兩個(gè)場(chǎng)景放入編譯序列,我們運(yùn)行程序:
欄 目:C#教程
下一篇:C#中FileStream的對(duì)比及使用方法
本文標(biāo)題:Unity3D游戲開發(fā)數(shù)據(jù)持久化PlayerPrefs的用法詳解
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4678.html
您可能感興趣的文章
- 01-10C#調(diào)用WebService實(shí)例開發(fā)
- 01-10實(shí)現(xiàn)ASP.NET無(wú)刷新下載并提示下載完成的開發(fā)思路
- 01-10C#開發(fā)中的垃圾回收機(jī)制簡(jiǎn)析
- 01-10Unity3d獲取系統(tǒng)時(shí)間
- 01-10Unity3D獲取當(dāng)前鍵盤按鍵及Unity3D鼠標(biāo)、鍵盤的基本操作
- 01-10C#微信開發(fā)(服務(wù)器配置)
- 01-10結(jié)合Visual C#開發(fā)環(huán)境講解C#中事件的訂閱和取消訂閱
- 01-10C#開發(fā)Android百度地圖手機(jī)應(yīng)用程序(多地圖展示)
- 01-10C#微信公眾平臺(tái)開發(fā)之高級(jí)群發(fā)接口
- 01-10C#微信公眾平臺(tái)開發(fā)之a(chǎn)ccess


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文