轉自:http://www.it165.net/pro/html/201404/12519.html; 秦元培的。 他的博客地址是:blog.csdn.net/qinyuanpei。html
1.//保存數據 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);
經過上面兩段代碼,咱們能夠發現兩點:程序員
一、Unity3D中的數據持久化是以鍵值的形式存儲的,能夠看做是一個字典。學習
二、Unity3D中值是經過鍵名來讀取的,當值不存在時,返回默認值。spa
目前,在Unity3D中只支持int、string、float三種數據類型的讀取,因此咱們能夠使用這三種數據類型來存儲簡單的數據。目前Unity3D中用於數據持久化的類爲layerPrefs,主要的類方法有:.net
好了,在瞭解layerPrefs的主要方法後,咱們以一個具體的例子來學習Unity3D中數據持久化的實現,咱們但願實如今一個場景中輸入信息以便在新場景中code
1 static function DeleteAll(): void 2 描述:從設置文件中移除全部鍵和值,謹慎的使用它們。 3 static function DeleteKey(key: string): void 4 描述:從設置文件中移除key和它對應的值。 5 static function GetFloat(key: string, defaultValue: float=OF): float 6 描述:若是存在,返回設置文件中key對應的值.若是不存在,它將返回defaultValue。 7 static function GetInt(key: string, defaultValue: int): int 8 描述:返回設置文件中key對應的值,若是存在.若是不存在,它將返回defaultValue。 9 static function GetString(key: string, defaultValue: string=**): string 10 描述:返回設置文件中key對應的值,若是存在.若是不存在,它將返回defaultValue. 11 static function HasKey(key: string): bool 12 描述:在設置文件若是存在key則返回真. 13 static function SetFloat(key: string, value: float): void 14 描述:設置由key肯定的值. 15 static function SetInt(key: string, value: int): void 16 描述:設置由key肯定的值. 17 static function SetString(key: string, value: string): void 18 描述:設置由key肯定的值.
讀取信息。咱們直接建立兩個場景,分別命名爲Scene0、Scene1(聽說程序員數數都是從0開始的,哈哈),場景中保留主攝像機便可。接下來咱們分別爲兩個場景編寫腳本:htm
第一個場景的腳本:blog
1 using UnityEngine; 2 using System.Collections; 3 public class Scene1Script : MonoBehaviour { 4 //姓名 5 private string mName="路人甲"; 6 //年齡 7 private int mAge=20; 8 //成績 9 private float mGrade=75.5F; 10 void OnGUI() 11 { 12 GUILayout.Label("Unity3D數據存儲示例程序",GUILayout.Height(25)); 13 //姓名 14 GUILayout.Label("請輸入姓名:",GUILayout.Height(25)); 15 mName=GUILayout.TextField(mName,GUILayout.Height(25)); 16 //年齡 17 GUILayout.Label("請輸入年齡:",GUILayout.Height(25)); 18 mAge=int.Parse(GUILayout.TextField(mAge.ToString(),GUILayout.Height(25))); 19 //成績 20 GUILayout.Label("請輸入成績:",GUILayout.Height(25)); 21 mGrade=float.Parse(GUILayout.TextField(mGrade.ToString(),GUILayout.Height(25))); 22 //提交數據 23 if(GUILayout.Button("提交數據",GUILayout.Height(25))) 24 { 25 //保存數據 26 PlayerPrefs.SetString("Name",mName); 27 PlayerPrefs.SetInt("Age",mAge); 28 PlayerPrefs.SetFloat("Grade",mGrade); 29 //切換到新場景 30 Application.LoadLevel("Scene1"); 31 } 32 } 33 }
第二個場景的腳本:ip
1 using UnityEngine; 2 using System.Collections; 3 public class Scene2Script : MonoBehaviour { 4 private string mName; 5 private int mAge; 6 private float mGrade; 7 void Start () 8 //讀取數據 9 mName=PlayerPrefs.GetString("Name","DefaultValue"); 10 mAge=PlayerPrefs.GetInt("Age",0); 11 mGrade=PlayerPrefs.GetFloat("Grade",0F); 12 } 13 void OnGUI() 14 { 15 GUILayout.Label("Unity3D數據存儲示例程序",GUILayout.Height(25)); 16 //姓名 17 GUILayout.Label("姓名:"+mName,GUILayout.Height(25)); 18 //年齡 19 GUILayout.Label("年齡:"+mAge,GUILayout.Height(25)); 20 //成績 21 GUILayout.Label("成績:"+mGrade,GUILayout.Height(25)); 22 23 //刪除數據 24 if(GUILayout.Button("清除數據",GUILayout.Height(25))) 25 { 26 PlayerPrefs.DeleteAll(); 27 } 28 //返回Scene0 29 if(GUILayout.Button("返回場景",GUILayout.Height(25))) 30 { 31 Application.LoadLevel("Scene0"); 32 } 33 } 34 }
咱們這裏直接將腳本綁定到攝像機上,而後將項目編譯,注意將兩個場景放入編譯序列,咱們運行程序:博客