国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Unity3D游戲開發數據持久化PlayerPrefs的用法詳解

2020-01-24 00:01:33
字體:
來源:轉載
供稿:網友

小編今天研究了在Unity3D中的數據持久化問題。數據持久化在任何一個開發領域都是一個值得關注的問題,小到一個應用中配置文件的讀寫,大到數據庫的管理維護,都可以看到數據持久化的身影。小編在《C#基于Linq和反射實現數據持久化框架Xml4DB》這篇文章中曾介紹了博主在寒假期間開發的Xml4DB框架,這是一個基于Xml的輕量級數據持久化框架,可以采用面向對象的方式來處理數據。數據持久化從某種意義上來說,就是序列化和反序列化化的過程。在.NET中我們可以將對象序列化為Xml、Json、二進制。然后通過反序列化重新獲得對象。同樣,在Android中我們可以通過使用Preferences來存儲鍵值型數據來實現數據持久化(當然還有其它的方式,這里只是為了強調鍵值型數據)。那么,在Unity3D中如何實現數據持久化呢?請大家跟隨我一起走進今天的文章:[Unity3D]Unity3D游戲開發之數據持久化PlayerPrefs的使用

首先我們來看兩段Unity3D中實現數據讀寫的簡單代碼吧:

 //保存數據 PlayerPrefs.SetString("Name",mName); PlayerPrefs.SetInt("Age",mAge); PlayerPrefs.SetFloat("Grade",mGrade)
 //讀取數據 mName=PlayerPrefs.GetString("Name","DefaultValue"); mAge=PlayerPrefs.GetInt("Age",0); mGrade=PlayerPrefs.GetFloat("Grade",0F);

通過上面兩段代碼,我們可以發現兩點:

1、Unity3D中的數據持久化是以鍵值的形式存儲的,可以看作是一個字典。

2、Unity3D中值是通過鍵名來讀取的,當值不存在時,返回默認值。

目前,在Unity3D中只支持int、string、float三種數據類型的讀取,所以我們可以使用這三種數據類型來存儲簡單的數據。目前Unity3D中用于數據持久化的類為layerPrefs,主要的類方法有:

 static function DeleteAll(): void 描述:從設置文件中移除所有鍵和值,謹慎的使用它們。  static function DeleteKey(key: string): void 描述:從設置文件中移除key和它對應的值。  static function GetFloat(key: string, defaultValue: float=OF): float 描述:如果存在,返回設置文件中key對應的值.如果不存在,它將返回defaultValue。  static function GetInt(key: string, defaultValue: int): int 描述:返回設置文件中key對應的值,如果存在.如果不存在,它將返回defaultValue。  static function GetString(key: string, defaultValue: string=**): string 描述:返回設置文件中key對應的值,如果存在.如果不存在,它將返回defaultValue.  static function HasKey(key: string): bool 描述:在設置文件如果存在key則返回真.  static function SetFloat(key: string, value: float): void 描述:設置由key確定的值.  static function SetInt(key: string, value: int): void 描述:設置由key確定的值.  static function SetString(key: string, value: string): void 描述:設置由key確定的值.

好了,在了解layerPrefs的主要方法后,我們以一個具體的例子來學習Unity3D中數據持久化的實現,我們希望實現在一個場景中輸入信息以便在新場景中讀取信息。我們直接創建兩個場景,分別命名為Scene0、Scene1(據說程序員數數都是從0開始的,哈哈),場景中保留主攝像機即可。接下來我們分別為兩個場景編寫腳本:

第一個場景的腳本:

using UnityEngine;using System.Collections; public class Scene1Script : MonoBehaviour {		//姓名	private string mName="路人甲";	//年齡	private int mAge=20;	//成績	private float mGrade=75.5F;		void OnGUI()	{		GUILayout.Label("Unity3D數據存儲示例程序",GUILayout.Height(25));		//姓名		GUILayout.Label("請輸入姓名:",GUILayout.Height(25));	 mName=GUILayout.TextField(mName,GUILayout.Height(25));		//年齡		GUILayout.Label("請輸入年齡:",GUILayout.Height(25));	 mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25)));		//成績		GUILayout.Label("請輸入成績:",GUILayout.Height(25));	 mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25)));				//提交數據		if(GUILayout.Button("提交數據",GUILayout.Height(25)))		{		 //保存數據		 PlayerPrefs.SetString("Name",mName);		 PlayerPrefs.SetInt("Age",mAge);		 PlayerPrefs.SetFloat("Grade",mGrade);		 		 //切換到新場景			Application.LoadLevel("Scene1");		}	}}

第二個場景的腳本:

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",0);	 mGrade=PlayerPrefs.GetFloat("Grade",0F);	}		void OnGUI()	{	 GUILayout.Label("Unity3D數據存儲示例程序",GUILayout.Height(25));	 //姓名	 GUILayout.Label("姓名:"+mName,GUILayout.Height(25));	 //年齡	 GUILayout.Label("年齡:"+mAge,GUILayout.Height(25));	 //成績	 GUILayout.Label("成績:"+mGrade,GUILayout.Height(25));			 //刪除數據	 if(GUILayout.Button("清除數據",GUILayout.Height(25)))	 {   PlayerPrefs.DeleteAll();	 }			 //返回Scene0	 if(GUILayout.Button("返回場景",GUILayout.Height(25)))	 {   Application.LoadLevel("Scene0");	 }			}}

我們這里直接將腳本綁定到攝像機上,然后將項目編譯,注意將兩個場景放入編譯序列,我們運行程序:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广河县| 武穴市| 麻栗坡县| 安庆市| 中西区| 盐亭县| 顺义区| 沈丘县| 无棣县| 乌鲁木齐市| 沧州市| 阜康市| 阿拉善右旗| 金寨县| 渝北区| 泊头市| 和龙市| 靖远县| 杭锦旗| 宣城市| 万年县| 南部县| 称多县| 大英县| 大石桥市| 兴文县| 根河市| 普安县| 云和县| 弥渡县| 河南省| 长宁县| 申扎县| 富阳市| 冷水江市| 古浪县| 华安县| 全南县| 阳东县| 姜堰市| 闸北区|