当前位置:   article > 正文

Unity Asset Bundle的基本操作流程_unitybundle构建

unitybundle构建

1.Asset Bundle

  • 序列化文件(Serialized file):一般用于存储预制体、模型、材质等在游戏场景中渲染以后才能看见的东西
  • 源文件(Resource file):一般用于存储图片、声音等随时可以看见的文件

2.指定Asset Bundle标签

 

这是属性面板右下角的面板,左边的输入框可以设置包的名称,可以用“/”来划分目录,如:“mat”或者“resources/mat”,右边的输入框代表包的后缀,比如:u3d。

3.构建Asset Bundle目录

  • 新建一个脚本,这里取名为ABTest(这个脚本一定要放在Editor目录下)
  • 写代码
  1. using UnityEditor;
  2. using System.IO;
  3. public class ABTest
  4. {
  5. //创建菜单栏选项
  6. [MenuItem ("Tools/Asset Bundles/Build AssetBundles")]
  7. static void BuildAssetBundle()
  8. {
  9. //相对于工程文件夹的路径
  10. string path = "Asset Bundles";
  11. //判断路径是否存在,不存在则创建
  12. if (!Directory.Exists(path))
  13. {
  14. Directory.CreateDirectory(path);
  15. }
  16. //构建Asset Bundle包
  17. BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
  18. }
  19. }

 

  • 代码解析

MenuItem这个程序集引用是在菜单栏中产生“Tools/Asset Bundles”并在之后产生一个“Build AssetBundles’按钮,只要点击这个按钮就可以执行下面的方法。

Path路径是“Asset Bundles”,这是相对于工程文件夹的路径(注意:不是相对于Asset目录的路径),因为我们只需要它在编辑器中执行就可以了,所以无需继承MonoBehaviour并放到场景中。

构建Asset Bundle的核心代码:

BuildPipeline.BuildAssetBundles(path,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);

path是构建的Asset Bundle包保存的路径,BuildTarget是打包的平台,这个一定要注意,比如你要打包到安卓平台,一定要写BuildTarget.Android。BuildAssetBundleOptions以后再解释,现在就这样写。

4.上传的服务器

  • 我们接下来是在本地操作,上传到服务器有时间再说。

5.载入Asset Bundle

  • 新建一个脚本,这里取名为ABSet吧
  • 还记得我们之前创建的材质吗?它叫“pige_mat“(为什么要提这个?之后你就知道了)。

    在场景中新建一个立方体,取名为“CubePrefab“,记住这个名字,然后把“pige_mat”这个材质赋予给“CubePrefab”,做成一个预制体(那么预制体的名字就叫“CubePrefab“了)。

  • 写代码
  1. using UnityEngine;
  2. public class ABSet : MonoBehaviour
  3. {
  4. void Start ()
  5. {
  6. //载入的Asset Bundle包的路径,精确到文件名(带后缀)
  7. AssetBundle ab1 = AssetBundle.LoadFromFile("Asset Bundles/resources/mat.u3d");
  8. AssetBundle ab2 = AssetBundle.LoadFromFile("Asset Bundles/resources/prefab.u3d");
  9. //把Asset Bundle作为GameObject载入
  10. ab1.LoadAsset<GameObject>("pige_mat");
  11. GameObject cube =ab2.LoadAsset<GameObject>("CubePrefab");
  12. //实例化对象
  13. Instantiate(cube);
  14. }
  15. }
  • 代码解析
  • 从Asset Bundle解压文件的核心代码

    AssetBundle.LoadFromFile("路径");

    注意该路径一定要保证完整,连后缀名都要记住,该方法返回的值是AssetBundle,所以用一个AssetBundle类型的变量来存储它。

    ab.load<类型>(“文件名”)

    游戏场景中的物体类型以GameObject为主,文件名注意不是Asset Bundle包的名称,而是原来文件的名称,建议这些文件在工程完成之前不要删除,否则忘记名字就麻烦了。

  • 补充
  • 最后把这个脚本挂在游戏场景中的物体上,如果要一次性解压包里的所有文件,可以用ab.LoadAllAsset(),这时用Object数组来存储它,然后遍历Object数组使得它们都实例化。

接下来的内容将会在下篇博文分享

https://blog.csdn.net/ultramansail/article/details/89053790

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/82152?site
推荐阅读
相关标签
  

闽ICP备14008679号