unity3d 保存文件到本地and加载本地文件 unity3d 加载本地音频

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

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

[csharp] view plaincopyprint?

//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。

publicstaticreadonlystringPathURL=

#ifUNITY_ANDROID//安卓

"jar:file://"+Application.dataPath+"!/assets/";

#elifUNITY_IPHONE//iPhone

Application.dataPath+"/Raw/";

#elifUNITY_STANDALONE_WIN||UNITY_EDITOR//windows平台和web平台

"file://"+Application.dataPath+"/StreamingAssets/";

#else

string.Empty;

#endif

//不同平台下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中

[csharp] view plaincopyprint?

usingUnityEngine;

usingSystem.Collections;

usingSystem.IO;

usingSystem.Collections.Generic;

usingSystem;

publicclassText:MonoBehaviour{

//文本中每行的内容

ArrayListinfoall;

//皮肤资源,这里用于显示中文

publicGUISkinskin;

voidStart()

{

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");

}

//写入模型到本地

IEnumeratorloadasset(stringurl)

{

WWWw=newWWW(url);

yieldreturnw;

if(w.isDone)

{

byte[]model=w.bytes;

intlength=model.Length;

//写入模型到本地

CreateModelFile(Application.persistentDataPath,"Model.assetbundle",model,length);

}

}

voidCreateModelFile(stringpath,stringname,byte[]info,intlength)

{

//文件流信息

//StreamWritersw;

Streamsw;

FileInfot=newFileInfo(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:写入的内容

*/

voidCreateFile(stringpath,stringname,stringinfo)

{

//文件流信息

StreamWritersw;

FileInfot=newFileInfo(path+"//"+name);
[unity3d]保存文件到本地and加载本地文件 unity3d 加载本地音频

if(!t.Exists)

{

//如果此文件不存在则创建

sw=t.CreateText();

}

else

{

//如果此文件存在则打开

sw=t.AppendText();

}

//以行的形式写入信息

sw.WriteLine(info);

//关闭流

sw.Close();

//销毁流

sw.Dispose();

}

/**

*读取文本文件

*path:读取文件的路径

*name:读取文件的名称

*/

ArrayListLoadFile(stringpath,stringname)

{

//使用流的形式读取

StreamReadersr=null;

try{

sr=File.OpenText(path+"//"+name);

}catch(Exceptione)

{

//路径与名称未找到文件则直接返回空

returnnull;

}

stringline;

ArrayListarrlist=newArrayList();

while((line=sr.ReadLine())!=null)

{

//一行一行的读取

//将每一行的内容存入数组链表容器中

arrlist.Add(line);

}

//关闭流

sr.Close();

//销毁流

sr.Dispose();

//将数组链表容器返回

returnarrlist;

}

//读取模型文件

IEnumeratorLoadModelFromLocal(stringpath,stringname)

{

strings=null;

#ifUNITY_ANDROID

s="jar:file://"+path+"/"+name;

#elifUNITY_IPHONE

s=path+"/"+name;

#elifUNITY_STANDALONE_WIN||UNITY_EDITOR

s="file://"+path+"/"+name;

#endif

WWWw=newWWW(s);

yieldreturnw;

if(w.isDone)

{

Instantiate(w.assetBundle.mainAsset);

}

}

/**

*path:删除文件的路径

*name:删除文件的名称

*/

voidDeleteFile(stringpath,stringname)

{

File.Delete(path+"//"+name);

}

voidOnGUI()

{

//用新的皮肤资源,显示中文

GUI.skin=skin;

//读取文件中的所有内容

foreach(stringstrininfoall)

{

//绘制在屏幕当中

GUILayout.Label(str);

}

if(GUILayout.Button("加载模型"))

{

StartCoroutine(LoadModelFromLocal(Application.persistentDataPath,"Model.assetbundle"));

}

}

}

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,后者貌似在移动平台是找不到的,前者就是所谓的沙盒文件,具有读写权限。

运行后的效果:



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

  

爱华网本文地址 » http://www.413yy.cn/a/25101011/83226.html

更多阅读

怎样在格式工厂里截取音频文件 格式工厂怎么截取音频

怎样在格式工厂里截取音频文件——简介日常生活中我们经常会将自己喜欢的歌曲作为手机铃声,但是我们只是需要歌曲的某一部分,那么我们怎么将我们需要的音频文件截取下来呢?下面给大家分享一下怎么样格式工厂快速简单的截取音频文件。

上古卷轴5mod怎么用 上古卷轴5mod怎么用nmm

上古卷轴5以mod多而著称,那么你会不会看网上有很多人物造型自己却只能眼馋呢?现在不会,我来教你怎么用mod,这样你就可以看白花花的妹子哦!上古卷轴5mod怎么用——步骤/方法在我的文档MyGameSkyrimSkyrimPrefs.ini文件 打开此文件在里面

视频录播软件如何录制本地计算机屏幕 red5 录制视频到本地

一直为不知用什么样的视频录制软件而苦恼,我之前用过wincam2000,cam studio等等软件。但是效果都不是很好,要么生成的文件太大,要不功能单一,因为我需要把制作的视频讲座上传到网站上,需要多路视频录制, 要有录制本机屏幕,具有快照功能,可监

怎样将PPT文件转换为Word文档? ppt模板转换word文档

2007-08-09 10:39:58 来源: IT168(北京) 网友评论 18 条 进入论坛应用程序完美转换PPT 到Word 文档 说起来很简单,就是你把下面这段代码文字复制到Windows 文本中,将文件保存为 .vbs生成一个可执行程序。保存在任何一个地方,比

声明:《unity3d 保存文件到本地and加载本地文件 unity3d 加载本地音频》为网友爱要不留余力分享!如侵犯到您的合法权益请联系我们删除