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
}
- PlayerPrefsX的用法
- ?的用法
- ?的用法
- ---" ~ " 的用法---
- ---" ~ " 的用法---
- ~ 的用法
- 的用法
- ##的用法
- ##的用法
- 的用法
- ${ }的用法
- ##的用法
- ${ }的用法
- "->"的用法
- ${ }的用法
- >>的用法
- &的用法
- ${}的用法
- sgu113
- int* 转double* 时的内存越界访问
- JAVA泛型容器的类型检查
- 如何使用android独立工具链快速移植开源项目
- 深入理解Java Proxy机制
- PlayerPrefsX的用法
- GDB
- 上机作业5
- RDD:基于内存的集群计算容错抽象
- 【Monogdb】MongoDB之十大应用设计技巧
- SDUT2128排序二叉树的中序遍历
- C++:istreambuf_iterator与istream_iterator的区别
- 黑马程序员---08内存管理(ARC)
- js 程序员必备的5个debug技巧