unity3d中StreamingAssets和Resources目录的区别

刚学unity3的人,肯定会对这两个目录非常困惑,知道他们都是只读的、Resources会加密,StreamingAssets不加密,但是在使用上到底有怎样的不同,却不太说得清楚。

我在用了unity3d有一段时间后,在研究AssetBundle及播放音频的时候,总算是弄清了他们的区别。当时是想播放一段音频,于是我把资源放在StreamingAssets目录下,用WWW加载a.ogg,然后并没有得到我想要的结果。但是放在Resources目录下面,Resources.Load()却能播放。后来经过研究,终于知道了这么几个概念的意思,也就清楚了前面为什么不能播放。

要说明这个原因,首先说一下AssetBundle。很多人应该知道这是unity3d里面用来打包资源的,支持的格式有限,如文理、音频、二进制、文本等。像一些.cs文件、.mp4文件是没法打包的。Resources目录下的资源在打包之后,也会生成AssetBundle,只是Resources下的资源会被系统自动处理。

那AssetBundle到底是什么呢?其实可以把它简单看成是一个资源集合,必须用WWW类来进行读取,而Resources可以看成是一个特殊的WWW,只能对于Resources目录的资源。而WWW读取的内容也必须是AssetBundle,所以一个单独的ogg文件无法用WWW读取,必须先打包成AssetBundle,才能用WWW读取。

StreamingAssets又是什么呢?这是个Raw目录,里面的内容不会加密、编码。比如png、ogg、AssetBundle文件,原来什么样,打包就是什么样。要使用这些文件的话,必须用对应的类来访问,如AssetBundle用WWW类,mp4用播放器插件加载(包括解析),用WWW加载mp4是不行的,因为识别不出来。

时间: 2024-08-05 12:05:39

unity3d中StreamingAssets和Resources目录的区别的相关文章

eclipse maven工程中src/main/resources目录下创建的文件夹是包图标的解决方法

如图:在src/main/resources目录下创建的文件夹却以包的图标显示  修改方法: 入下图,按顺序1 ,2,3,4操作,把3处remove,在4处添加**  修改后如下:  然后点击完成后,文件夹图标显示正常了 

unity3d中C#与JS的一些区别

unity3d目前支持C#和JS两种脚本语言. 学习过程中发现很多教程使用的是JS语言,自己还是用C#比较多,unity原生使用的是Mono,使用C#会更加接近unity的编程思想. 1.方法的定义,C#为强类型语言,所有的类型都必须明确标注:javascript为弱类型语言. (强弱类型应该不用解释吧(╯‵□′)╯︵┻━┻) String GetSomething(int arg){ return "Something"; } function GetSomething(var ar

Spring Boot中如何读取resources目录下的文件

在Java编码过程中,我们常常希望读取项目内的配置文件,按照Maven的习惯,这些文件一般放在项目的src/main/resources下,因此,合同协议PDF模板.Excel格式的统计报表等模板的存放位置是resources/template/test.pdf,下面提供两种读取方式,它们分别在windows和Linux环境(linux下jar包)都可以正常运行. 方法一 ClassPathResource String pdfFilePath = "template/test.pdf"

Eclipse中lib 和 libs 目录的区别 和加载jar注意的一些事项

http://blog.csdn.net/jiangwei0910410003/article/details/41384667 插件工程打包不能集成接口jar,宿主工程打包一定要集成接口jar

关于Unity3D中Resources动态加载NGUI图片的方法

在NGUI中有些图片我需要动态进行变更或者加载,怎么办? 首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~ NGUI加载图片的方法其实是加载NGUI生成的atlas,大家可以看看NGUI的图集文件(一个material.一个prefab,一张图集),我们要做的就是动态加载这个prefab(它有UIAtlas属性),然后通过图片名称更改图片. 我这里那UISprite来说明,我是这样做的: UIAtlas tu = Resour

linux中mnt,media以及dev目录的区别

前几天手贱,一不小心把/usr给删掉了.于是刻了个backtrack3的启动盘,进去系统备份.我用mount /dev/sda6 /mnt/home挂载了home,然后tar cf /mnt/usb0/bak.tar /mnt/home备份.备份完了后,我在backtrack3中的虚拟目录到处逛,忽然,我发现/media目录下也有一个home文件夹,打开一看,发现与/mnt/home一模一样!原来,/mnt目录存放手动挂载的硬件,/media目录存放自动挂载的硬件(载点都是由系统自动建立和删除的

Unity3d碰撞检测中碰撞器与触发器的区别

一,要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动. 二,两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 三,在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器. 1>碰撞器:一群组件,它包含了很多种类,比如:Box Collider(盒碰撞体),Mesh Collider(网格碰撞体)等,这些碰撞器应用的场合不同,但都必须加到GameObjecet身上,碰撞检测,但

Unity3D中Update()与FixedUpdate()的区别

Unity3D中Update()与FixedUpdate()的区别是什么呢?从字面上理解,它们都是在更新时会被调用,并且会循环的调用.但是Update会在每次渲染新的一帧时,被调用.而FixedUpdate会在每个固定的时间间隔被调用,那么要是Update 和FixedUpdate的时间间隔一样,是不是就一样呢?答案是不一定,因为Update受当前渲染的物体,更确切的说是三角形的数量影响,有时快有时慢,帧率会变化,update被调用的时间间隔就发生变化.但是FixedUpdate则不受帧率的变化

Unity3D中的Coroutine详解

Unity中的coroutine是通过yield expression;来实现的.官方脚本中到处会看到这样的代码. 疑问: yield是什么? Coroutine是什么? unity的coroutine程序执行流程怎么那么奇怪? unity中的coroutine原理是什么,怎么实现的? 使用unity的coroutine需要注意什么问题? 一.yield的在几种语言中的程序执行特性: Lua中的yield是使得协同函数运行->挂起并且传递参数给resume.resume使得协同函数挂起->运行