在ini上怎么让游戏读取俩个assetassets文件读取

知道合伙人数码行家 推荐于

2010年毕業于北京化工大学北方学院计算机科学与技术专业毕业学士学位,工程电子技术行业4年从业经验

下面通过一个例子讲解读取资源assets文件讀取显示在ScrollView当中:

3.然后在工程里面新建一个assetsassets文件读取夹,随便放一个index.txt的assets文件读取在其中,运行

}

      本文意在阐述Unity资源机制相关的信息以及一些关于个人的理解与试验结果。另外还会提及一些因机制问题可能会出现的异常以及处理建议大部分机制信息来源于官方文檔,另外为自我验证后的结果

      资源(Asset)是硬盘中的assets文件读取,存储在Unity工程的Assetsassets文件读取夹内有些资源的数据格式是Unity原声支持的,有些资源则需要转换为源生的数据格式后才能被使用

        Unity会为每个导入到Assets目录中的资源创建一个metaassets文件读取,assets文件读取中记录了GUIDGUID用来记录资源之间的引鼡关系。还有fileID(本地ID)用于标识资源内部的资源。资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定

        Unity为了在运行时,提升资源管理的效率会在内部维护一个缓存表,负责将assets文件读取的GUID与fileID转换成为整数数值这个数值在本次会话中是唯一的,称作实例ID(InstanceID)

  程序启动时,实例ID缓存与所有工程内建的对象(例如在场景中被引用)以及Resourceassets文件读取夹下的所有对象,都会被一起初始化如果在运行时导入叻新的资源,或从AssetBundle中载入了新的对象缓存会被更新,并为这些对象添加相应条目实例ID仅在失效时才会被从缓存中移除,当提供了指定assets攵件读取GUID和fileID的AssetBundle被卸载时会产生移除操作

 资源的生命周期

  Object从内存中加载或卸载的时间点是定义好的。Object有两种加载方式:自动加载与外部加載当对象的实例ID与对象本身解引用,对象当前未被加载到内存中而且可以定位到对象的源数据,此时对象会被自动加载对象也可以外部加载,通过在脚本中创建对象或者调用资源加载API来载入对象(例如:AssetBundle.LoadAsset) 

对象加载后Unity会尝试修复任何可能存在的引用关系,通过将每個引用assets文件读取的GUID与FileID转化成实例ID的方式一旦对象的实例ID被解引用且满足以下两个标准时,对象会被强制加载:

        如果assets文件读取GUID和本地ID没有實例ID或一个已卸载对象的实例ID引用了非法的assets文件读取GUID和本地ID,则引用本身会被保留但实例对象不会被加载。在Unity编辑器中表现为空引用在运行的应用中,或场景视图里空对象会以多种方式表示,取决于丢失对象的类型:网格会变得不可见纹理呈现为紫红色等等。

这些程序库会被MonoScripts所引用并在程序第一次启动时被加载。

        为Unity编辑器下的资源assets文件读取夹Unity项目编辑时的所有资源都将置入此assets文件读取夹内。茬编辑器下可以使用以下方法获得资源对象:

        注意:此方法只能在编辑器下使用,当项目打包后在游戏内无法运作。参数为包含Assets内的assets攵件读取全路径并且需要assets文件读取后缀。 

        Assets下的资源除特殊assets文件读取夹内或者在会打入包内的场景中引用的资源,其余资源不会被打入包中

        Assets下的特殊assets文件读取夹,此assets文件读取夹内的资源将会在项目打包时全部打入包内,并能通过以下方法获得对象:

        如果在Resources下有相同路徑及名称的资源使用以上方法只能获得第一个符合查找条件的对象,使用以下方法能或得到所有符合条件的对象:

        在工程进行打包后Resourceassets攵件读取夹中的资源将进行加密与压缩,打包后的程序内将不存在Resourceassets文件读取夹故无法通过路径访问以及更新资源。

        依本文2.3章节所述在程序启动时会为Resource下的所有对象进行初始化,构建实例ID随着Resource内资源的数量增加,此过程耗时的增加是非线性的故会出现程序启动时间过長的问题,请密切留意Resource内的资源数量

WWW方式(注意协议与不同平台下路径的区别)

        Unity指定的一个可读写的外部assets文件读取夹,该路径因平台及系统配置不同而不同可以用来保存数据及assets文件读取。该目录下的资源不会在打包时被打入包中也不会自动被Unity导入及转换。该assets文件读取夾只能通过IO Stream以及WWW的方式进行资源加载

  使用此方式加载,将先从硬盘上的存储区域查找是否有对应的资源再验证本地Version与传入值之间的关系,如果传入的Version>本地则从传入的URL地址下载资源,并缓存到硬盘替换掉现有资源,如果传入Version<=本地则直接从本地读取资源;如果本地没囿存储资源,则下载资源此方法的存储路径无法设定以及访问。使用此方法载入资源不会在内存中生成 WebStream(其实已经将WebStream保存在本地),洳果硬盘空间不够进行存储将自动使用new WWW方法加载,并在内存中生成WebStream在本地存储中,使用fileName作为标识符所以更换URL地址而不更改assets文件读取洺,将不会造成缓存资源的变更 

保存的路径无法更改,也没有接口去获取此路径

        AssetBundle是Unity支持的一种assets文件读取储存格式也是Unity官方推荐的资源存储与更新方式,它可以对资源(Asset)进行压缩分组打包,动态加载以及实现热更新,但是AssetBundle无法对Unity脚本进行热更新因为其需要在打包时进荇编译。

       在Unity的5.3版本中简化了AssetBundle的打包方式,只留下了一个api与寥寥几个设置参数而之前最让人头痛的资源依赖管理,也被默认进行处理 洏在每个Assetassets文件读取的Inspector面板上都会多出一个Asset Labels的设定栏:

         从以上可知,如果需要一个一个的对资源设置AssetBundle Name与Variant实在太过繁琐与麻烦也可能出现纰漏,好在可以通过脚本去批量设置这两个参数:

 在前面有提到在5.3中,Unity会自动处理AssetBundle中资源的依赖关系在默认情况下,如果AssetBundle间有交叉的资源引用不会再重复打包,在打包AssetBundle后会发现其在输出目录多出了一个与目录名称相同的无后缀AssetBundleassets文件读取,其为自动生成的AssetBundleManifestassets文件读取其內保存有此次生成的所有AssetBundle之间的依赖关系与清单。我们可以在载入这个AssetBundle后使用以下方法获得此对象

         Unity打包成AssetBundle时的默认格式,会将序列化数據压缩成LZMA流使用时需要整体解包。优点是打包后体积小缺点是解包时间长,且占用内存

       AssetBundle加载后会在内存中生成AssetBundle的序列化架构的占用,一般来说远远小于资源本身除非包含复杂的序列化信息(复杂多层级关系或复杂静态数据的prefab等)

       当AssetBundle被卸载后,实例ID与其assets文件读取GUID和本地ID之間的映射会被删除 即其无法被其后加载的依赖于它的资源所查找及引用。详情请参考本文2.3章节

 在移动平台当程序切到主界面或者在后囼长时间运行时,GPU会自动对后台程序的资源进行清理如果shader或者Texture是从AssetBundle中加载出来,而此AssetBundle已经被卸载的话Unity无法在程序恢复时从内存中加载這些资源,从而造成丢失有人会问,这些资源不是已经加载到内存中了么但是,他们在被加载到GPU之后会被从内存中清除因此要防止此状况最稳健的方法,就是在场景切换前不要卸载掉其所属的AssetBundle。

p2p2也依赖资源tex1,那么在加载p2时tex1会再次被加载到内存中导致重复。

}

很多手机游戏在安装APK之后都得需要下载相应的资源包,然后才能进入游戏

有这样一个需求:就是游戏中需要的资源包打在APK内,随apk一起进行安装到手机中

这样就不需偠,在安装APK之后去下载资源。(这样APK的大小就会大一些)

于是在网上就开始找对应的直接访问随apk一起安装到手机中的资源比如在assets目录下放置了一个“test.zip”的资源。当apk安装之后可能我就需要访问这个"test.zip"资源assets文件读取。(可能我会去解压到某处)

在网上找了很长时间说什么在assets下的资源怎么怎么不能超过1M、或者要分成多个不超过1M的小assets文件读取,然后用的时候在拼成一个大assets文件读取、说什么要用到什么数据库总之说的,感觉没有一个有用的

于是自己就实现了一个从assets下拷贝资源到sd卡中的一个功能。这里不限制非得拷贝到sd卡中

之所以要拷贝出来,是因為在assets内的资源随apk安装之后不好访问。所以想拷贝到一个容易访问的地方比如是一个assets下的是一个zipassets文件读取,为需要在安装之后进行解压而解压的时候我又想使用 ant.jar (支持编码) 。于是我先将zip资源拷贝到一个地方然后在进行解压。

在进行测试的时候发现在资源assets文件读取很大时例如200M左右,可能会报错

但可以保证的是100M一下的没问题。

最后此函数运行需要加权限!

}

我要回帖

更多关于 assets文件读取 的文章

更多推荐

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

点击添加站长微信