大牛专栏 收藏本版 已有21人收藏 +发表新主题
查看: 15328|回复: 0
打印 上一主题 下一主题

【Unity+Vuforia】使用Assetbundle打包资源到SD卡并读取

[复制链接]

【Unity+Vuforia】使用Assetbundle打包资源到SD卡并读取

15821010156 发表于 2016-10-25 09:44:03 浏览:  15328 回复:  0 只看该作者 复制链接
本帖最后由 15821010156 于 2016-10-25 09:52 编辑

   很多同学反应把模型资源全部放在工程中导出的APK非常大,那么可以用把模型资源打包成Assetbundle(下文简称AB)包的形式,可以存在服务器上,使用的时候下载到SD卡,程序再从SD卡读取资源的方式。这样就可以大大减小APK的大小。   
     Assetbundle的原理及实现代码参考 雨松MOMO 的教程:http://www.xuanyusong.com/archives/2373
     下面介绍我的实现步骤:
      (1)在Assets/Editor文件夹下创建脚本:ExportAssetBundles.cs

此脚本要注意的地方:
               1、头文件脚本放置的位置;
               2、注意第20行与第21行,分别是用来打包使用在Android平台上的AB文件和使用在PC端上的AB文件)
        在哪个平台测试就要用相应方式导出的AB文件,不能混用(区别在于最后的那个参数);
               3、一次只能打包一个资源(批量打包请继续研究雨松的教程)。
               4、记得在Assets下创建一个StreamingAssets文件夹(如果原本没有的话)
        脚本保存完之后,刷新工程(保存一下),会在Unity菜单栏出现Custom Editor/Create AssetBunldes Main选项。打包流程:将要打包的模型资源保存成prefab → 选中此prefab → 选择Create AssetBunldes Main菜单项 → 导出成功。将导出得到的.assetbundle文件通过数据线放入手机SD卡根目录下等待测试吧。


       (2)打开ImageTarget下的脚本
DefaultTrackableEventHandler.cs
         1、加入头文件         2、在此类中添加路径变量:(我在PC端测试时才使用到此路径,在Android端时使用了绝对路径)
         3、添加一个函数:
         4、在OnTrackingFound()函数的最后添加下列语句:
          表示识别到识别图之后,加载相应的模型进场景。

[url=]复制代码[/url]
[size=1em]1

[size=1em]2

[size=1em]3

[size=1em][size=1em]//      StartCoroutine(LoadMainGameObject(PathURL + "carcar.assetbundle"));//PC端测试
[size=1em]  //    StartCoroutine(LoadMainGameObject("[color=black !important][size=1em]file:///storage/emulated/0/carcar.assetbundle"));//Android端测试(绝对路径)
[size=1em]        StartCoroutine(LoadMainGameObject("[color=black !important][size=1em]file:///" + Application.persistentDataPath + "/carcar.assetbundle"));//Android端测试(相对路径)



          这三句分别用于PC端测试和Android端测试。Android端的路径请注意路径格式,在真机中Application.persistentDataPath 得到的路径名是
/mnt/sdcard/Android/data/com.xxx.xxx/files,因此AB文件也要相应的找到那个文件夹的位置放置。
         
          5、在OnTrackingLost()函数最后添加下列语句:
          表示在识别图丢失之后将识别图上对应的模型从场景中删除
[size=1em]1

[size=1em][size=1em]Destroy(GameObject.Find("carcar(Clone)"));



           从上面语句我们可以注意到,从AB文件读取来的资源会自动在后面添加 (Clone) ,比如我的资源本身名字是carcar的,加入场景后自动变成了carcar(Clone),因此操作时应该对物体名字做出相应的修改。



         (3)创建一个脚本:ModelShow.cs (注意不能放在Editor文件夹中,与步骤(1)区分开来)
          此脚本用来对识别到识别图后加载进场景的模型进行位置、大小等方面的调节,因为模型加载进场景中时默认坐标为0,0,0 ,大小为原始大小,不利于我们观看。



         值得注意的是:如果模型身上带有脚本,在工程中最好也存在对应的脚本,加载模型到场景中后会根据脚本名字寻找对应的脚本重载挂在物体上。


          最后一步:导出APK时别忘了打开SD卡读取权限。

         Player Settings → Other Settings → Write Access 选择 External(SDCard)

             完成,导出APK测试吧!


转自http://www.arvrschool.com/read.php?tid=376,如有侵权,烦请告知删除,谢谢!

分享至:
| 人收藏
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.