C#&Unity3D 保存数据系列之流
对于程序数据的修改保存,通常都是在程序运行过程中保存在内存里,因此当程序关闭重新启动的时候,数据依然是一开始初始化的赋值。那么当运行过程中对某些数据进行修改并保存,程序二次运行时怎样让程序自己直接加载这些数据?笔者曾咨询过高人、上网搜集过资料、查阅过书籍,大概有playerprefs、流、XML、数据库、CONFIG、INI。后两种笔者未做过详细了解,这里先就流做一个简单的列子。
Unity3D引擎中,将一个二维数组的成员显示在UI上,开始的数值是:

首先使用命名空间using System.IO,创建一个流文件,格式为TXT,指定文件路径并写入二维数组成员到test.txt文件,代码如下:
//对流文件test进行写入操作方法
void CreateStreamTXT(int[,] XCarray)
{
print(Application.dataPath);
FileStream myStream=new FileStream(Application.dataPath+"/Stream/test.txt",FileMode.OpenOrCreate);
StreamWriter myWriter=new StreamWriter(myStream);
for(int i=0;i<2;i++)
{
for(int j=0;j<4;j++)
{
myWriter.WriteLine(XCarray[i,j]);
}
}
myWriter.Flush();
myWriter.Close();
myStream.Close();
}
通过一个按钮区修改二维数组成员的值,这里以循环的方式给数组成员赋值,代码如下:
void OnGUI()
{
GUI.skin = mySkin;
GUI.Label(new Rect(0,30,100,30),"TXT文件流 :");
GUI.Label(new Rect(100,30,100,30),Array1[0,0]+" "+Array1[0,1]+" "+Array1[0,2]+" "+Array1[0,3]);
GUI.Label(new Rect(100,60,100,30),Array1[1,0]+" "+Array1[1,1]+" "+Array1[1,2]+" "+Array1[1,3]);
if(GUI.Button(new Rect(200,30,100,30),"修改文件流"))
{
//对二位数组Array1赋值
for(int i=0;i<2;i++)
{
for (int j = 0; j < 4;j++ )
{
Array1[i, j] = i * j + 1;
}
}
CreateStreamTXT(Array1);
}
}
点击按钮“修改文件流”,UI显示变成:

此时修改的内容已经通过 CreateStreamTXT(Array1)方法程序写入test.txt文件,因此只要通过程序一运行的时刻,执行加载代码,即可在程序重新启动时加载test.txt文件,数组的显示内容将是最后一次修改后的。代码如下:
void Start ()
{
ReadStreamTXT(); //加载方法
}
void ReadStreamTXT()
{
int i = 0,j = 0;
string[] myStr = new string[8];
myStr = File.ReadAllLines(Application.dataPath + "/Stream/test.txt");
foreach (string str in myStr)
{
Array1[i,j] = Convert.ToInt16(str);
j++;
j = Mathf.Clamp(j, 0, 4);
if(j==4)
{
j = 0;
i++;
i = Mathf.Clamp(i, 0, 1);
}
}
}
本文来源 我爱IT技术网 http://www.52ij.com/jishu/4148.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
