Unity3D游戲開發之數據持久化PlayerPrefs的使用


            轉自:http://www.it165.net/pro/html/201404/12519.html;  秦元培的。  他的博客地址是:blog.csdn.net/qinyuanpei。

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);

 

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

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

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

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

 

好了,在了解layerPrefs的主要方法后,我們以一個具體的例子來學習Unity3D中數據持久化的實現,我們希望實現在一個場景中輸入信息以便在新場景中

 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開始的,哈哈),場景中保留主攝像機即可。接下來我們分別為兩個場景編寫腳本:

 

第一個場景的腳本:

 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 }

 

 

第二個場景的腳本:

 

 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 }

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM