如何使用unity中unity resources 过大文件

【Unity】Resource加载浅析
【Unity】Resource加载浅析
Resource常用方法Resource.Load&&用于资源加载,常用Resource.Load&泛型&(加载文件名字)得到asset下的Resource文件中的目标文件,搜索方式是以asset目录下子目录为Resource名字的文件夹,再找需要加载文件的名字。返回的是泛型的对象。public class ExampleClass : MonoBehaviour{ &private void Start() &{ & &var go = GameObject.CreatePrimitive(PrimitiveType.Plane); & &var rend = go.GetComponent&Renderer&();
& &rend.material.mainTexture = Resources.Load&Texture&(&glass&);
}值得一说的是如果加载文件名字在整个资源中有两个的话,是加载目录路径层次高的那个Resource文件夹中的资源,给我的感觉这个是逐层遍历的,Resource文件夹下面还有可以有Resource文件夹。可以在Resource文件夹下添加文件夹然后可以指定搜索某一个文件夹中的文件。rend.material.mainTexture=Resource.Load&Testure&(&Texture/glass&);这里文件夹路径必须是斜杠,而不是反斜杠,unity中的路径好像都是斜杠,如果你直接写路径的话,从外部输进来好像是可以的。Resource.LoadAll&&看这个名字就知道了,这个是去搜索目标路径内所有的泛型内容。返回一个数组public class ExampleClass : MonoBehaviour { &void Start() & {
& & &GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
& & &Texture2D[] textures = (Texture2D[]) Resources.LoadAll(&Textures&);
& & &Texture2D texture = textures[Random.Range(0, textures.Length)];
& & &go.GetComponent&Renderer&().material.mainTexture =
}Resources.UnloadUnusedAssets这是用来释放内存用的,在使用Destroy后其实是没有把内存释放的。在destroy后再使用这个方法就释放了。值得注意的是如果你的Resource.Load()赋值给一个变量后,然后Destroy这个实例对象,在使用这个方法是无法在内存中删除的,需要把这个变量制为空就可以了,因为这个变量是一直引用着Resource.Load的,所以Resource.Load最好不要添加引用。在使用Destroy实例对象后没有使用此方法,再次实例新的对象是不会增加内存的消耗的。Resource的好处刚学unity的时候就听教程上说用这个方法好,可以优化资源,unity打包的时候可以把Resource文件夹的资源都打包。但是如果你在场景中引用的话也可以在打进包里啊,我知道这个时候你就会说像是texture2d这种不可能在场景中都用到嘛,这样的可以用这种方法,但是为啥要把场景所有的东西都动态加载呢?像场景模型这些固定的为什么也要动态加载呢?是要创建自己的对象池吗?但是这样的动态加载感觉很鸡肋啊,直接在场景中把这些固定的放好不就好了吗?还要自己去实例化,不是很明白。如果你换场景,不再用这个固定的模型,没去卸载他,岂不是有增加了内存的消耗。而且美术,策划那边如果要改场景中的一些东西也很不方便啊,有没有那个大神带发个车?今天问问大哥知道了用这个方式是为了后面打包的时候方便分包用。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 一个程序员的成长之路
作者最新文章Unity Assets目录下的特殊文件夹名称_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Unity Assets目录下的特殊文件夹名称
上传于|0|0|文档简介
&&Unity Assets目录下的特殊文件夹名称
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢当前位置: >
手机上的路径
时间: 15:09 来源:互联网 作者:网络 浏览:
Application.dataPath路径在PC上无论是Editor还是运行时都是毫无眼里,非常万能。但是在手机上他却完全无用。手机上有两个很重要的路径:Application.streamingAssetsPath和Application.persistentDataPath。1.Application.streamingAssetsPath&& &它是一个只读路径,游戏运行中程序只能对他进行读取,并无法写入。在unity的Assets/目录下起一个叫StreamingAssets的文件夹即可。一般可以把一些预制的2进制文件放在里面,我个人觉得如果是assetbundle最好不要放在里面,因为用WWW把本地的assetbundle读取后,会将解压后的资源放在cache里面,但是由于StreamingAssets文件夹是只读文件,所以你没法删除它,那么应用程序就会更加占用空间。举个例子,就好比你在电脑上解压一个.zip文件,那么其实你只需要使用解压后的文件。但是原始用.zip文件如果还保留在文件夹西安,那么容量就更大了。痛仰的assetbundle如果放在CDN上去下载,那么你本地就不会保留这个多余的assetbundle文件,而是直接把解压后的资源保存在了cache中。&& &如果你坚持要把assetbundle放在streamingAssets文件夹下,我觉得一定要做好加密工作。因为把你的.ipa或者.apk下载后都不用破解资源直接可以把你的assetbundle原封不动的取出来。。。2.Application.persistentDataPath&& &它是一个可以读、写的路径,在IOS上就是应用程序的沙盒。而在Android可以使程序的沙盒,也可以是sdcard,在打包Android的时候,ProjectSetting页面有一个选项Write Access,可以设置他的路径是沙盒还是sdcard。&& &如果你在这个路径下写入文件后,IOS上可以通过同步推一类的助手直接取出来写入文件。在Android上如果你设置保存在沙盒中,那么就必须root才能取出文件。不过建议你最好设置写入sdcard里,这样就不用root也可以在电脑上访问文件。假设安装的手机没有sdcard,或者sdcard被锁住(有的Android手机插拔USB会锁一下sdcard),那么他会自动指向你的应用程序沙盒路径。&& &我觉得它的最大缺点就是只能运行时才能写入或者读取,假设你想在打包前写入一些二进制文件在persistentDataPath里面是不行的。假设你要写Android的交互插件,那么.java类中是无法访问unity里面的资源的。但是有一个办法,如下代码,图片放在Resources文件夹下,比如在Awake()方法中把二进制文件拷贝在persistentDataPath下面,这样C# Java两边就都可以访问它了。// 拷贝图片string imagePath=Application.persistentDataPath+&/image.png&;if(!System.IO.File.Exists(imagePath)){&& &Texture2D tex=Resources.Load(&image&) as Texture2D;&& &System.IO.File.WriteAllBytes(imagePath,tex.EncodeToPNG());}或者是streamingAssetsPath目录下的资源也可以通过这种方法考北大sdcard中
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的开发经验 ??????}

我要回帖

更多关于 unity resources 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信