PlayerPrefsX的用法

来源:互联网 发布:淘宝怎么免费装修店铺 编辑:程序博客网 时间:2024/05/29 10:14

Unity本身有PlayerPrefs来做一些数据的保存和读取,也可以通过循环来做批量的读取或者保存,下面这个脚本可以方便的调用用来做上面批量的工作,比如读取一组文本数组数据和保存一组文本数组数据.

建议把这个脚本放在Standard Assets(或者Plugins目录下,这样可以按照下面的方法方便的调用它.现在包含了下面这些命令:

     PlayerPrefsX.SetVector3
      PlayerPrefsX.GetVector3
      PlayerPrefsX.SetIntArray
      PlayerPrefsX.GetIntArray
      PlayerPrefsX.SetFloatArray
      PlayerPrefsX.GetFloatArray
      PlayerPrefsX.SetStringArray
      PlayerPrefsX.GetStringArray

保存一个向量

   static function SetVector3 (key : string, value : Vector3) : boolean

//尝试保存一个物体位置     var player : GameObject;
if (!PlayerPrefsX.SetVector3("PlayerPosition",player.transform.position))//成功返回真,否则假(例如用Webplayer保存超过1M数据的时候)。
print("不能保存物体位置!");

获得一个向量

varplayer : GameObject;
player.transform.position = PlayerPrefsX.GetVector3("PlayerPosition");//如果读取的向量存在的话将会返回这个向量值。

保存一组整型数据:

//当保存Scores命名的分数时候创建一个10成员数组
var myScores = new int[10];
for (i = 0; i < myScores.Length; i++)
    myScores[i] = i+1;
if (!PlayerPrefsX.SetIntArray("Scores", myScores))
 print("不能保存分数!");

    获得一组整型数据

staticfunction GetIntArray (key : string) : int[]
如果存在将返回这组数据,否则将返回int[0];

varscores = PlayerPrefsX.GetIntArray("Scores");

staticfunction GetIntArray (key : string, defaultValue : int, defaultSize : int) :int[]
如果不存在这组数据,将返回指定长度的数组以及每个成员都会赋予默认值.

其他函数的使用方法:

staticfunction SetFloatArray (key : string, value : float[]) : boolean
static function GetFloatArray (key : string) : float[]
static function GetFloatArray (key : string, defaultValue : float, defaultSize: int) : float[]
static function SetStringArray (key : string, value : String[]) : boolean
static function SetStringArray (key : string, value : String[], separator :char) : boolean
static function GetStringArray (key : string) : string[]
static function GetStringArray (key : string, separator : char) : string[]
static function GetStringArray (key : string, defaultValue : String,defaultSize : int) : string[]
static function GetStringArray (key : string, separator : char, defaultValue :String, defaultSize : int) : string[]

自己写的测试脚本如下:

using UnityEngine;

using System.Collections;

 

public classTest :MonoBehaviour {

    publicint[]scores =newint[10];

         //Use this for initialization

         voidStart ()

    {

        for(inti = 0; i < 10; i++)//先定义一个数组,赋值为 1 2 3 4 5 6 7 8 9 10

        {

           scores[i] = i + 1;

            Debug.Log("分数: "+scores[i]);

           

        }

        PlayerPrefsX.SetIntArray("SCORES",scores);//保存整型数组到SCORES的名字存储空间中;

        for(inti = 0; i < 10; i++)//然后重新为数组赋值为10 11 12 13 14 15 16 17 18 19

        {

           scores[i] = i + 10;

            Debug.Log("分数: " +scores[i]);

 

        }

       Invoke("Printf",5);//5s以后再把保存到SCORES变量下的存储的数组的信息重新写到scores的数组中;此处要注意,接受信息的是最初的数组名scores,而不是scores[]数组;再使用数组的知识,就可以获得每个元素的值了!

 

         }

 

    voidPrintf()

    {

       scores = PlayerPrefsX.GetIntArray("SCORES");

        for(inti = 0; i < 10; i++)

        {

            Debug.LogError(i+"id: "+scores[i]);

        }

}最后运行的结果是:1 2 3 4 5 6 7 8 9 10  10 11 12 13 14 15 16 17 18 19  最后是12 3 4 5 6 7 8 9 10下面两图为输出信息截图:

 

同理,其他几种类型的数据的批量存取用法与PlayerPrefsX.SetIntArray用法类似;

 

该脚本的C#版

//Contribution (Created CSharp Version) 10/2010: Daniel P. Rossi (DR9885)
// Contribution (Created Bool Array) 10/2010: Daniel P. Rossi (DR9885)
// Contribution (Made functions public) 01/2011: Bren

using UnityEngine;
using System;

public static class PlayerPrefsX
{
    #region Vector 3

    /// <summary>
    /// Stores a Vector3 value into a Key
    /// </summary>
    public static bool SetVector3(string key, Vector3 vector)
    {
        return SetFloatArray(key, newfloat[3] { vector.x, vector.y, vector.z });
    }

    /// <summary>
    /// Finds a Vector3 value from a Key
    /// </summary>
    public static Vector3 GetVector3(string key)
    {
        float[] floatArray =GetFloatArray(key);
        if (floatArray.Length < 3)
            returnVector3.zero;
        return new Vector3(floatArray[0],floatArray[1], floatArray[2]);
    }

    #endregion

    #region Bool Array

    /// <summary>
    /// Stores a Bool Array or Multiple Parameters into a Key
    /// </summary>
    public static bool SetBoolArray(string key, params bool[]boolArray)
    {
        if (boolArray.Length == 0) returnfalse;

        System.Text.StringBuilder sb = newSystem.Text.StringBuilder();
        for (int i = 0; i <boolArray.Length - 1; i++)
           sb.Append(boolArray[i]).Append("|");
        sb.Append(boolArray[boolArray.Length- 1]);

        try { PlayerPrefs.SetString(key,sb.ToString()); }
        catch (Exception e) { return false;}
        return true;
    }

    /// <summary>
    /// Returns a Bool Array from a Key
    /// </summary>
    public static bool[] GetBoolArray(string key)
    {
        if (PlayerPrefs.HasKey(key))
        {
            string[]stringArray = PlayerPrefs.GetString(key).Split("|"[0]);
            bool[]boolArray = new bool[stringArray.Length];
            for (int i =0; i < stringArray.Length; i++)
               boolArray[i] = Convert.ToBoolean(stringArray[i]);
            returnboolArray;
        }
        return new bool[0];
    }

    /// <summary>
    /// Returns a Bool Array from a Key
    /// Note: Uses default values to initialize if no key wasfound
    /// </summary>
    public static bool[] GetBoolArray(string key, booldefaultValue, int defaultSize)
    {
        if (PlayerPrefs.HasKey(key))
            returnGetBoolArray(key);
        bool[] boolArray = newbool[defaultSize];
        for (int i = 0; i < defaultSize;i++)
            boolArray[i]= defaultValue;
        return boolArray;
    }

    #endregion

    #region Int Array

    /// <summary>
    /// Stores a Int Array or Multiple Parameters into a Key
    /// </summary>
    public static bool SetIntArray(string key, params int[]intArray)
    {
        if (intArray.Length == 0) returnfalse;

        System.Text.StringBuilder sb = newSystem.Text.StringBuilder();
        for (int i = 0; i <intArray.Length - 1; i++)
           sb.Append(intArray[i]).Append("|");
        sb.Append(intArray[intArray.Length -1]);

        try { PlayerPrefs.SetString(key,sb.ToString()); }
        catch (Exception e) { return false;}
        return true;
    }

    /// <summary>
    /// Returns a Int Array from a Key
    /// </summary>
    public static int[] GetIntArray(string key)
    {
        if (PlayerPrefs.HasKey(key))
        {
            string[]stringArray = PlayerPrefs.GetString(key).Split("|"[0]);
            int[]intArray = new int[stringArray.Length];
            for (int i =0; i < stringArray.Length; i++)
               intArray[i] = Convert.ToInt32(stringArray[i]);
            returnintArray;
        }
        return new int[0];
    }

    /// <summary>
    /// Returns a Int Array from a Key
    /// Note: Uses default values to initialize if no key wasfound
    /// </summary>
    public static int[] GetIntArray(string key, intdefaultValue, int defaultSize)
    {
        if (PlayerPrefs.HasKey(key))
            returnGetIntArray(key);
        int[] intArray = newint[defaultSize];
        for (int i = 0; i < defaultSize;i++)
            intArray[i]= defaultValue;
        return intArray;
    }

    #endregion

    #region Float Array

    /// <summary>
    /// Stores a Float Array or Multiple Parameters into a Key
    /// </summary>
    public static bool SetFloatArray(string key, params float[]floatArray)
    {
        if (floatArray.Length == 0) returnfalse;

        System.Text.StringBuilder sb = newSystem.Text.StringBuilder();
        for (int i = 0; i <floatArray.Length - 1; i++)
           sb.Append(floatArray[i]).Append("|");
       sb.Append(floatArray[floatArray.Length - 1]);

        try
        {
           PlayerPrefs.SetString(key, sb.ToString());
        }
        catch (Exception e)
        {
            returnfalse;
        }
        return true;
    }

    /// <summary>
    /// Returns a Float Array from a Key
    /// </summary>
    public static float[] GetFloatArray(string key)
    {
        if (PlayerPrefs.HasKey(key))
        {
            string[]stringArray = PlayerPrefs.GetString(key).Split("|"[0]);
            float[]floatArray = new float[stringArray.Length];
            for (int i =0; i < stringArray.Length; i++)
               floatArray[i] = Convert.ToSingle(stringArray[i]);
            returnfloatArray;
        }
        return new float[0];
    }

    /// <summary>
    /// Returns a String Array from a Key
    /// Note: Uses default values to initialize if no key wasfound
    /// </summary>
    public static float[] GetFloatArray(string key, floatdefaultValue, int defaultSize)
    {
        if (PlayerPrefs.HasKey(key))
            returnGetFloatArray(key);
        float[] floatArray = newfloat[defaultSize];
        for (int i = 0; i < defaultSize;i++)
            floatArray[i]= defaultValue;
        return floatArray;
    }

    #endregion

    #region String Array

    /// <summary>
    /// Stores a String Array or Multiple Parameters into a Keyw/ specific char seperator
    /// </summary>
    public static bool SetStringArray(string key, charseparator, params string[] stringArray)
    {
        if (stringArray.Length == 0) returnfalse;
        try
        { PlayerPrefs.SetString(key,String.Join(separator.ToString(), stringArray)); }
        catch (Exception e)
        { return false; }
        return true;
    }

    /// <summary>
    /// Stores a Bool Array or Multiple Parameters into a Key
    /// </summary>
    public static bool SetStringArray(string key, paramsstring[] stringArray)
    {
        if (!SetStringArray(key,"\n"[0], stringArray))
            returnfalse;
        return true;
    }

    /// <summary>
    /// Returns a String Array from a key & char seperator
    /// </summary>
    public static string[] GetStringArray(string key, charseparator)
    {
        if (PlayerPrefs.HasKey(key))
            returnPlayerPrefs.GetString(key).Split(separator);
        return new string[0];
    }

    /// <summary>
    /// Returns a Bool Array from a key
    /// </summary>
    public static string[] GetStringArray(string key)
    {
        if (PlayerPrefs.HasKey(key))
            returnPlayerPrefs.GetString(key).Split("\n"[0]);
        return new string[0];
    }

    /// <summary>
    /// Returns a String Array from a key & char seperator
    /// Note: Uses default values to initialize if no key wasfound
    /// </summary>
    public static string[] GetStringArray(string key, charseparator, string defaultValue, int defaultSize)
    {
        if (PlayerPrefs.HasKey(key))
            returnPlayerPrefs.GetString(key).Split(separator);
        string[] stringArray = newstring[defaultSize];
        for (int i = 0; i < defaultSize;i++)
           stringArray[i] = defaultValue;
        return stringArray;
    }

    /// <summary>
    /// Returns a String Array from a key
    /// Note: Uses default values to initialize if no key wasfound
    /// </summary>
    public static String[] GetStringArray(string key, stringdefaultValue, int defaultSize)
    {
        return GetStringArray(key,"\n"[0], defaultValue, defaultSize);
    }

    #endregion
}

 

0 0
原创粉丝点击