[unity3d]保存文件到本地and加载本地文件

今天要做一个移动平台的版本控制,先做一个前期的工作,就是从服务器端加载资源,然后读取到本地,再从本地读取资源。这里就以pc平台为例,移动平台也是一样,就是稍微做一点路径上的修改,

下面是不同平台路径的预编译:

//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。public static readonly string PathURL =#if UNITY_ANDROID //安卓"jar:file://" + Application.dataPath + "!/assets/";#elif UNITY_IPHONE //iPhoneApplication.dataPath + "/Raw/";#elif UNITY_STANDALONE_WIN || UNITY_EDITOR //windows平台和web平台"file://" + Application.dataPath + "/StreamingAssets/";#elsestring.Empty;#endif关于资源的打包不理解的,我在之前的博文中有介绍:,可以去看一下这篇文章。操作步骤:

创建脚本,命名Text.cs,并且将其拖放到MainCamera中

using UnityEngine;using System.Collections;using System.IO;using System.Collections.Generic;using System; public class Text : MonoBehaviour {//文本中每行的内容ArrayList infoall;//皮肤资源,这里用于显示中文public GUISkin skin;void Start (){print("当前文件路径:"+Application.persistentDataPath);//删除文件DeleteFile(Application.persistentDataPath,"FileName.txt");//创建文件,共写入3次数据CreateFile(Application.persistentDataPath,"FileName.txt","dingxiaowei");CreateFile(Application.persistentDataPath,"FileName.txt","丁小未");//CreateFile(Application.persistentDataPath ,"Filename.assetbundle","丁小未");//下载模型StartCoroutine(loadasset(""));//得到文本中每一行的内容infoall = LoadFile(Application.persistentDataPath,"FileName.txt");}//写入模型到本地IEnumerator loadasset(string url){WWW w = new WWW(url);yield return w;if (w.isDone){byte[] model = w.bytes;int length = model.Length;//写入模型到本地CreateModelFile(Application.persistentDataPath, "Model.assetbundle", model,length);}}void CreateModelFile(string path, string name, byte[] info, int length){//文件流信息//StreamWriter sw;Stream sw;FileInfo t = new FileInfo(path + "//" + name);if (!t.Exists){//如果此文件不存在则创建sw = t.Create();}else{//如果此文件存在则打开//sw = t.Append();return;}//以行的形式写入信息//sw.WriteLine(info);sw.Write(info, 0, length);//关闭流sw.Close();//销毁流sw.Dispose();}/** * path:文件创建目录 * name:文件的名称 * info:写入的内容 */ void CreateFile(string path,string name,string info) {//文件流信息StreamWriter sw;FileInfo t = new FileInfo(path+"//"+ name);if(!t.Exists){//如果此文件不存在则创建sw = t.CreateText();}else{//如果此文件存在则打开sw = t.AppendText();}//以行的形式写入信息sw.WriteLine(info);//关闭流sw.Close();//销毁流sw.Dispose(); }/** * 读取文本文件 * path:读取文件的路径 * name:读取文件的名称 */ ArrayList LoadFile(string path,string name) {//使用流的形式读取StreamReader sr =null;try{sr = File.OpenText(path+"//"+ name);}catch(Exception e){//路径与名称未找到文件则直接返回空return null;}string line;ArrayList arrlist = new ArrayList();while ((line = sr.ReadLine()) != null){//一行一行的读取//将每一行的内容存入数组链表容器中arrlist.Add(line);}//关闭流sr.Close();//销毁流sr.Dispose();//将数组链表容器返回return arrlist; }//读取模型文件 IEnumerator LoadModelFromLocal(string path, string name) {string s = null;#if UNITY_ANDROIDs = "jar:file://"+path+"/"+name;#elif UNITY_IPHONEs = path+"/"+name;#elif UNITY_STANDALONE_WIN || UNITY_EDITORs = "file://"+path+"/"+name;#endifWWW w = new WWW(s);yield return w;if (w.isDone){Instantiate(w.assetBundle.mainAsset);} }/** * path:删除文件的路径 * name:删除文件的名称 */void DeleteFile(string path,string name) {File.Delete(path+"//"+ name); }void OnGUI() {//用新的皮肤资源,显示中文GUI.skin = skin;//读取文件中的所有内容foreach(string str in infoall){//绘制在屏幕当中GUILayout.Label(str);}if (GUILayout.Button("加载模型")){StartCoroutine(LoadModelFromLocal(Application.persistentDataPath, "Model.assetbundle"));} } }上面设计到文件流操作,还有就是Application.persistentDataPath,,这里并没有用Application.DataPath,后者貌似在移动平台是找不到的,前者就是所谓的沙盒文件,具有读写权限。运行后的效果:

这里演示了读取操作文本和打包文件,如果切换到移动平台可能中文字体无法显示,就需要做个字体即可,后面继续版本控制后续工作。

补充:假设你的程序中已经预先将2进制文件做好,如下图所示,你需要把二进制文件放在StreamingAssets这个文件夹中,一定要放在这里。

举个例子,放在StreamingAssets中二进制文件打包后,Unity会将这些二进制文件放置在对应平台下的路径下。所以根据不同平台,访问的路径是不一样的。切记,你的二进制文件一定要放在StreamingAssets !!!!!!

01#if UNITY_EDITOR

02string filepath = Application.dataPath +"/StreamingAssets"+"/my.xml";

03

04#elif UNITY_IPHONE

05string filepath = Application.dataPath +"/Raw"+"/my.xml";

06

07#elif UNITY_ANDROID

08string filepath = "jar:file://" + Application.dataPath + "!/assets/"+"/my.xml;

09

10#endif

==================== 迂者 丁小未 CSDN博客专栏=================

MyBlog: MyQQ:1213250243

Unity QQ群:858550 cocos2dx QQ群:280818155

======================相互学习,共同进步===================

也许这就是一个人无法抗拒的命运,有你、有我、也有他。

[unity3d]保存文件到本地and加载本地文件

相关文章:

你感兴趣的文章:

标签云: