Unity3D游戏本地存储
Unity3D游戏本地存储玩家积分。Unity提供了一个类似配置文件的类,可以非常好的实现信息数据的存储,那就是PlayerPrefs。它可以存储:int、float和string类型。
// 存进去
PlayerPrefs.SetInt("key1", 10);
PlayerPrefs.SetString("key2", aaaaaa);
PlayerPrefs.SetFloat("key3", 10.009);
// 取出来
int i = PlayerPrefs.GetInt("key1");
001.using UnityEngine;
002.using System.Collections;
003.using System.IO;
004.using System.Collections.Generic;
005.using System;
006.
007.public class Text : MonoBehaviour {
008. //文本中每行的内容
009. ArrayList infoall;
010. //皮肤资源,这里用于显示中文
011. public GUISkin skin;
012. void Start ()
013. {
014. print("当前文件路径:"+Application.persistentDataPath);
015. //删除文件
016. DeleteFile(Application.persistentDataPath,"FileName.txt");
017.
018. //创建文件,共写入3次数据
019. CreateFile(Application.persistentDataPath,"FileName.txt","dingxiaowei");
020. CreateFile(Application.persistentDataPath,"FileName.txt","丁小未");
021. //CreateFile(Application.persistentDataPath ,"Filename.assetbundle","丁小未");
022. //下载模型
023. StartCoroutine(loadasset("http://192.168.1.180/3DShowResource/Products/AssetBundles/HX_DY02.assetbundle"));
024. //得到文本中每一行的内容
025. infoall = LoadFile(Application.persistentDataPath,"FileName.txt");
026.
027.
028. }
029. //写入模型到本地
030. IEnumerator loadasset(string url)
031. {
032. WWW w = new WWW(url);
033. yield return w;
034. if (w.isDone)
035. {
036. byte[] model = w.bytes;
037. int length = model.Length;
038. //写入模型到本地
039. CreateModelFile(Application.persistentDataPath, "Model.assetbundle", model,length);
040. }
041. }
042.
043. void CreateModelFile(string path, string name, byte[] info, int length)
044. {
045. //文件流信息
046. //StreamWriter sw;
047. Stream sw;
048. FileInfo t = new FileInfo(path + "//" + name);
049. if (!t.Exists)
050. {
051. //如果此文件不存在则创建
052. sw = t.Create();
053. }
054. else
055. {
056. //如果此文件存在则打开
057. //sw = t.Append();
058. return;
059. }
060. //以行的形式写入信息
061. //sw.WriteLine(info);
062. sw.Write(info, 0, length);
063. //关闭流
064. sw.Close();
065. //销毁流
066. sw.Dispose();
067. }
068.
069. /**
070. * path:文件创建目录
071. * name:文件的名称
072. * info:写入的内容
073. */
074. void CreateFile(string path,string name,string info)
075. {
076. //文件流信息
077. StreamWriter sw;
078. FileInfo t = new FileInfo(path+"//"+ name);
079. if(!t.Exists)
080. {
081. //如果此文件不存在则创建
082. sw = t.CreateText();
083. }
084. else
085. {
086. //如果此文件存在则打开
087. sw = t.AppendText();
088. }
089. //以行的形式写入信息
090. sw.WriteLine(info);
091. //关闭流
092. sw.Close();
093. //销毁流
094. sw.Dispose();
095. }
096.
097.
098.
099. /**
100. * 读取文本文件
101. * path:读取文件的路径
102. * name:读取文件的名称
103. */
104. ArrayList LoadFile(string path,string name)
105. {
106. //使用流的形式读取
107. StreamReader sr =null;
108. try{
109. sr = File.OpenText(path+"//"+ name);
110. }catch(Exception e)
111. {
112. //路径与名称未找到文件则直接返回空
113. return null;
114. }
115. string line;
116. ArrayList arrlist = new ArrayList();
117. while ((line = sr.ReadLine()) != null)
118. {
119. //一行一行的读取
120. //将每一行的内容存入数组链表容器中
121. arrlist.Add(line);
122. }
123. //关闭流
124. sr.Close();
125. //销毁流
126. sr.Dispose();
127. //将数组链表容器返回
128. return arrlist;
129. }
130.
131. //读取模型文件
132. IEnumerator LoadModelFromLocal(string path, string name)
133. {
134. print("file:///" + path + "/" + name);
135. WWW w = new WWW("file:///"+path + "/" + name);
136. yield return w;
137. if (w.isDone)
138. {
139. Instantiate(w.assetBundle.mainAsset);
140. }
141. }
142.
143.
144. /**
145. * path:删除文件的路径
146. * name:删除文件的名称
147. */
148.
149. void DeleteFile(string path,string name)
150. {
151. File.Delete(path+"//"+ name);
152. }
153.
154. void OnGUI()
155. {
156. //用新的皮肤资源,显示中文
157. GUI.skin = skin;
158. //读取文件中的所有内容
159. foreach(string str in infoall)
160. {
161. //绘制在屏幕当中
162. GUILayout.Label(str);
163. }
164. if (GUILayout.Button("加载模型"))
165. {
166. StartCoroutine(LoadModelFromLocal(Application.persistentDataPath, "Model.assetbundle"));
167. }
168. }
169.
170.}