我是靠谱客的博主 顺利楼房,最近开发中收集的这篇文章主要介绍[unity3d]保存文件到本地and加载本地文件操作步骤:运行后的效果:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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

//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。 public static readonly string PathURL = #if UNITY_ANDROID
//安卓
"jar:file://" + Application.dataPath + "!/assets/"; #elif UNITY_IPHONE
//iPhone
Application.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群:858550         cocos2dx QQ群:280818155

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


转载于:https://blog.51cto.com/dingxiaowei/1366123

最后

以上就是顺利楼房为你收集整理的[unity3d]保存文件到本地and加载本地文件操作步骤:运行后的效果:的全部内容,希望文章能够帮你解决[unity3d]保存文件到本地and加载本地文件操作步骤:运行后的效果:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部