赞
踩
这是属性面板右下角的面板,左边的输入框可以设置包的名称,可以用“/”来划分目录,如:“mat”或者“resources/mat”,右边的输入框代表包的后缀,比如:u3d。
- using UnityEditor;
- using System.IO;
-
- public class ABTest
- {
- //创建菜单栏选项
- [MenuItem ("Tools/Asset Bundles/Build AssetBundles")]
-
- static void BuildAssetBundle()
- {
- //相对于工程文件夹的路径
- string path = "Asset Bundles";
-
- //判断路径是否存在,不存在则创建
- if (!Directory.Exists(path))
- {
- Directory.CreateDirectory(path);
- }
-
- //构建Asset Bundle包
- BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
- }
- }
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以后再解释,现在就这样写。
我们接下来是在本地操作,上传到服务器有时间再说。
还记得我们之前创建的材质吗?它叫“pige_mat“(为什么要提这个?之后你就知道了)。
在场景中新建一个立方体,取名为“CubePrefab“,记住这个名字,然后把“pige_mat”这个材质赋予给“CubePrefab”,做成一个预制体(那么预制体的名字就叫“CubePrefab“了)。
- using UnityEngine;
-
- public class ABSet : MonoBehaviour
- {
- void Start ()
- {
- //载入的Asset Bundle包的路径,精确到文件名(带后缀)
- AssetBundle ab1 = AssetBundle.LoadFromFile("Asset Bundles/resources/mat.u3d");
- AssetBundle ab2 = AssetBundle.LoadFromFile("Asset Bundles/resources/prefab.u3d");
-
- //把Asset Bundle作为GameObject载入
- ab1.LoadAsset<GameObject>("pige_mat");
- GameObject cube =ab2.LoadAsset<GameObject>("CubePrefab");
-
- //实例化对象
- Instantiate(cube);
- }
- }
从Asset Bundle解压文件的核心代码
AssetBundle.LoadFromFile("路径");
注意该路径一定要保证完整,连后缀名都要记住,该方法返回的值是AssetBundle,所以用一个AssetBundle类型的变量来存储它。
ab.load<类型>(“文件名”)
游戏场景中的物体类型以GameObject为主,文件名注意不是Asset Bundle包的名称,而是原来文件的名称,建议这些文件在工程完成之前不要删除,否则忘记名字就麻烦了。
最后把这个脚本挂在游戏场景中的物体上,如果要一次性解压包里的所有文件,可以用ab.LoadAllAsset(),这时用Object数组来存储它,然后遍历Object数组使得它们都实例化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。