一:打包资源。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class AssetsBundle : MonoBehaviour { [MenuItem("Assets/Buid AssetBundle")] static void BuildAllAssetsBundles() { BuildPipeline.BuildAssetBundles("AssetBundle", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows); //用这句代码来打包这个文件 //AssetBundle 代表文件名.也就是要提前在这个工程目录下创建一个AssetBundle的文件. //第二个参数(BuildAssetBundleOptions.None)表示 AssetBundle Build Option //第三个参数是平台 } }
MenuItem就是在Assets下多了个按钮,这个和编辑插件一样, 之后的语法buildPipeline这个似乎有些api弃用,必须把参数填全。
之后打包出来的东西就是资源文件下prefab 的inspector面板中 右下角位置。 注意这里的输出资源是同assets同级目录下。
打包完成后会多一个了:AssetBundle文件 以及.manifest文件。 无后缀的文件表示了当前打包的所有资源, .mainfest文件则表示了我们打包的prefab的所有依赖的scripts等文件。
二:读取资源
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LoadAssetsBundle : MonoBehaviour { public string url; public string assetsName; IEnumerator Start() { WWW www = new WWW(url); yield return www;//等待www加载完成 if (www.error!=null) { Debug.Log("net error"); } else { AssetBundle bundle= www.assetBundle; Object obj= bundle.LoadAsset(assetsName); var t=Instantiate(obj); bundle.Unload(false);//true 全部卸载 false释放用过的 这里如果写true会发现纹理贴图不见了,是紫色的 } www.Dispose();//释放资源 } }
其中url是读取的assetbundle: 注意如果是本地的则是(注意/字符)
file://D:/Battle/AssetBundle/player1.assetbundleassetsName则是我们刚刚生成的 ,我这里是player1
尝试着在自己的ftp上读取 url:
ftp://10.192.69.9/player1.assetbundle
这个就不用file:了