[unity3d]保存文件到本地and加载本地文件
来源:互联网 发布:it人才网 编辑:程序博客网 时间:2024/05/18 19:46
今天要做一个移动平台的版本控制,先做一个前期的工作,就是从服务器端加载资源,然后读取到本地,再从本地读取资源。这里就以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/";#else string.Empty;#endif
关于资源的打包不理解的,我在之前的博文中有介绍:http://blog.csdn.net/dingxiaowei2013/article/details/17439887,可以去看一下这篇文章。
操作步骤:
创建脚本,命名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("http://192.168.1.180/3DShowResource/Products/AssetBundles/HX_DY02.assetbundle")); //得到文本中每一行的内容 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_ANDROID s = "jar:file://"+path+"/"+name;#elif UNITY_IPHONE s = path+"/"+name;#elif UNITY_STANDALONE_WIN || UNITY_EDITOR s = "file://"+path+"/"+name;#endif WWW 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
02
string filepath = Application.dataPath +"/StreamingAssets"+"/my.xml";
03
04
#elif UNITY_IPHONE
05
string filepath = Application.dataPath +"/Raw"+"/my.xml";
06
07
#elif UNITY_ANDROID
08
string filepath = "jar:file://" + Application.dataPath + "!/assets/"+"/my.xml;
09
10
#endif
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:http://blog.csdn.net/dingxiaowei2013 MyQQ:1213250243
Unity QQ群:375151422 cocos2dx QQ群:280818155
====================== 相互学习,共同进步 ===================
10 0
- [unity3d]保存文件到本地and加载本地文件
- [unity3d]保存文件到本地and加载本地文件
- unity3d保存文件到本地and加载本地文件
- unity3d保存文件到本地and加载本地文件
- [unity3d]保存文件到本地and加载本地文件
- 保存文件到本地and加载本地文件
- 保存文件到本地
- flex读取本地文件,修改,并保存到本地
- JS保存文件到本地
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- php 下载保存文件保存到本地
- 获取程序所在文件路径及保存STREAM到本地文件
- 根据url地址下载文件到本地,返回本地文件地址
- 将文件下载到本地以及删除本地文件
- rdkafka 保存offset到本地文件
- C++保存数据到本地文件
- python保存数据到本地文件
- javascript 获取web应用根目录
- 基于ARM嵌入式工控机主板的人机界面组态软件开发方案
- Mono
- PHP Framework Laravel4 之路 三
- 火车上的交谈
- [unity3d]保存文件到本地and加载本地文件
- Struts2 应用的开发步骤
- Android仿QQ消息列表ListView滑动删除效果
- acm笔记(3)
- PHP Framework Laravel4 之路 四
- iframe实现局部刷新和回调(转)
- 待写
- Java - 关于InputStream,InputStreamReader和BufferedReader
- js