移动平台的资源路径问题_第1页
移动平台的资源路径问题_第2页
移动平台的资源路径问题_第3页
移动平台的资源路径问题_第4页
移动平台的资源路径问题_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

移动平台的资源路径问题

想要读取一个文件,白然首先要找到这个文件,下面小匹夫首先会总结一下unity3d中

存在的各个地址,之后再总结一下各个地址在各个移动平台中的对应位置。

Unity3D中的资源路径

a

Apolication.dataPath此属性用于返回程序的数据文件所在文件夹的路径。例如在门出

Editor中就是Assets了。。汨

Apolication.streamingAssetsPath此属性用于返回流数据的缓存目录,返回路径为相对路径,平

适合设置一些外部数据文件的路径。

Apolication.persistentDataPath此属性用于返回一个持久化数据存储目录的路径,可以在此

路径下存储一些持久化的数据文件。I

OS

Apolication.temporaryCachePath此属性用于返回一个临时数据的缓存目录。立

Apolication.dataPath/data/app/

Apolication.streamingAssetsPathjar:file:///data/app//!/assets

Apolication.persistentDataPath/data/data//files面

的3

Apolication.temporaryCachePath/data/data//cache

Apjliualiuri.dalaPdlliAppliualiuri/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Dala

Apolication.streamingAssetsPaApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/

thRaw

Apolication.persistentDataPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents

Apolication.temporaryCachePaApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Cache

ths

表格,我们可以看到dataPath和streamingAssetsPath的路径位置一般是相对程序的安装

目录位置,而persistentDataPath和temporaryCachePath的路径位况一般是相对所在系

统的固定位置。那么现在明确了unity3d中各个地址在不同平台上的含义,下一个问题就

来了,也就是我打包之后的资源要怎么和这些地址对应上呢?要知道在pc的editor里默认

的资源文件存放的路径就是Assets啊,为何又会派生出那么多路径呢?

简单介绍一下unity3d中资源的处理种类:

小匹夫遇到过的大体就是如下几种了,Resources、StreamingAssets>AssetBundle^

PersistentDataPath,下面简单分析•下。

Resources:

是作为一个Unity3D的保存文件夹出现的,也就是如果你新建的文件夹的名字叫

Resources,那么里面的内容在打包时都会被无条件的打到发布包中。它的特点简单总结

一下就是:

1.只读,即不能动态修改。所以想要动态更新的资源不要放在这里。

2.会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为

Prefab在打包时会自动过滤掉不需要的资源,有利于减小资源包的大小。

3.主线程加载。

4.资源读取使用Resources.Load()o

StreamingAssets:

要说到StreamingAssets,其实和Resources还是蛮像的。同样作为一个只读的Unity3D

的保存文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包

时会被压缩和加密。而StreamingAsset文件夹中的内容那么会原封不动的打入包中,因此

StreamingAssets主要用来存放一些二进制文件。下面也同样做一个简单的总结:

1.同样,只读不可写。

2.主要用来存放二进制文件。

3,只能用过WWW类来读取。

AssetBundle:

关于AssetBundle的介绍已经有很多了。简而言之就是把prefab或者二进制文件封装成

AssetBundle文件(也是一种二进制)。但是也有硬伤,就是在移动端无法更新脚本。下

面简单的总结下:

1.是Unity3D定义的一种二进制类型。

2.最好将prefab封装成AseetBundle,不过上面不是才说了在移动端无法更新脚本吗?

那从Assetbundle中拿到的Prefab上挂的脚本是不是就无法运行了?也不一定,只要

这个prefab上挂的是本地脚本,就可以。

3.使用WWW类来下载。

PersistentDataPath:

看上去它只是个路径呀,可为什么要把它从路径里面单独拿出来介绍呢?因为它确实蛮

特殊的,这个路径下是可读写。而且在IOS上就是应用程序的沙盒,但是在Android可以

是程序的沙盒,也可以是sdcard。并且在Android打包的时候,Projectsetting页面有一个

选项WriteAccess,可以设置它的路径是沙盒还是sdcard。下面同样简单的总结一下:

1.内容可读写,不过只能运行时才能写入或者读取。提前将数据存入这个路径是不可行的。

2.无内容限制。你可以从StreamingAsset中读取二进制文件或者从AssetBundle读取

文件来写入PersistentDataPath中。

3.写下的文件,可以在电脑上查看。同样也可以清掉。

移动平台读取外部文件的方法

之所以要介绍Resources、StreamingAssets>AssetBundle、PersistentDataPath这四

个东东,就是因为读取外部资源的操作所涉及到的东西无外乎这几种。既然是用Unity3D

来开发游戏,那么自然要使用Unity3D规定的操作方式,而不是我们在PC上很原始的那

种操作方式来操作咯

下面分别实现•下利用Resojrces、StreamingAssetsAssetBundle来读取的过程。

Resources:

首先我们新建一个Resources目录,并且将上面我们用到的Test.xml复制一份到这个文

件夹中。如图:

然后我们通过Resources的读取方法来读取Test.xml的内容。并且调用GUI将xml的

内容绘制出来。

///ffResources读取xml

usingUnityEngine;

usingSyotcm.Collections;

usingEggToolkit;

using;

newColor(46f/256f,163f/256f,256f/256f,256f/256f);

GUI.Label(newRect(400,10,500,200),_result,titleStyle);

}

}

结果如图:

OK,Resources读取外部资源目标达成!!

F面我们继续,这次那么是使用StreamingAssets来操作,

StreamingAssets:

同Resources一样,我们要新建一个StreamingAssets的文件夹来存放我们的Test.xml

文件。如图:

不过前义已经说了,StreamingAssets义件夹内的东西并不会被压缩和加密,而是放进

去什么就是什么,所以一般是要放二进制文件的,这里小匹夫仅仅做一个演示,各位在实

际操作中切记不要直接把数据文件放到这个目录中打包。

usingUnityEngine;

usingSystem.Collections;

usingEggToolkit;

using;

usingSystem.Xml;

usingSystem.10;

publicclassTest:MonoBehaviour{

privatestring_result;

//UsethisforinitiaLization

voidStart(){

StcrtCoroutine(LoadXML());

)

//UpdateiscaLLedonceperframe

voidUpdate(){

}

///<summary>

//j如前文所述,streamingAssets只靠使用WVM来读取.

//j如果不是使用VMW来读取的同学,就小要问为啥读不到streamingAssets下的内容了。

///这里还可以使用了perststenDataPath来保存从streamtngassets那里读到内容。

///</summary>

IErumeratorLoadXML()

(

stringsPath=Application.streamingAssetsPath+"/Test.xml";

WWWwww=newWWW(sPath);

yieldreturnwww;

_result=text;

}

voidOnGUI()

GUIStyletitleStyle=newGUIStyle();

titlestyle.fontSize=20;

=newColor(46f/256f,163f/256f,256f/256f,256f/256f);

GUI.Label(newRect(400,10,500,200),Result,titleStyle);

}

}

结果如图:

OK,StreamingAssets读取外部资源目标达成!!

下面我们继续,最后那么是使用AssetBundle来操作。

AssetBundle:

来至ijAssetBundle,这里就和上面两个不一样了。首先我们要把我们的文件Test.xml打

成AssetBundle文件,由于使用的是小米3作为测试机,所以AssetBundle的平台选择为

Andorido

如图,我们创立了一个AssetBundle文件,并命名为TextXML。并且按照二进制文件放

入StreamingAssets文件夹中的惯例,将这个AssetBundle文件放入StreamingAssets文

件夹。

那么下面就是从AssetBudle中读取Test.xml的内容咯。直接上代码:

//岚AssetBundle中读取xml

usingEggToolkit;

using;

usingSystem.Xml;

usingbystem.1U;

publicclassTest:MonoBehaviour{

privatestring_result;

//UsethisforinitiaLization

voidStart(){

LOcdXML();

}

//UpdateiscaLLedonceperframe

voidUpdate(){

}

voidLoadXM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论