打包文件和场景:
1、在Asset文件夹下创建名称为StreamingAssets的文件夹(自由命名,保存文件和读取文件的路径)。
2、创建C#脚本名称为MyAssetBundles(脚本放入Editor文件夹中,不能结成MonoBehaviour)。
using UnityEngine;
using System.Collections;
using UnityEditor;
public class MyAssetBundles
{
//需要引用UnityEditor(特性),在unity菜单目录上会多出一个“Custom Editor”选项,子目录为“Create AssetBunldes Main”
[MenuItem("Custom Editor/Create AssetBunldes Main")]
//打包单个文件
static void CreateAssetBunldesMain()
{
//获取在Project视图中选择的所有游戏对象
Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
//遍历所有选择的游戏对象
foreach (Object obj in SelectedAsset)
{
//获取资源路径
string sourcePath = AssetDatabase.GetAssetPath(obj);
/*将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,("StreamingAssets"移动平台下只能读取这个路径)
/StreamingAssets是只读路径,不能写入
/.assetbundle为文件后缀名称,可以修改
*/服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
//在对应的目录位置(StreamingAssets)生成的文件名字为选择的“游戏对象的名字+.assetbundle”
string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
//创建打包的资源,目录为StreamingAssets,名称为obj.name+.assetbundle
//参数1、选择的对象;参数2、选择的对象组;参数3、路径和名称;参数4、资源包编译选项;参数5、目标平台(BuildTarget)参数5(可选),默认为web。
if (BuildPipeline.BuildAssetBundle(obj, null, targetPath, BuildAssetBundleOptions.CompleteAssets))
{
Debug.Log(obj.name + "资源打包成功");
}
else
{
Debug.Log(obj.name + "资源打包失败");
}
}
//刷新编辑器,重新导入有更新的资源。
AssetDatabase.Refresh();
}
//“Custom Editor”选项,子目录为“Create AssetBunldes ALL”
[MenuItem("Custom Editor/Create AssetBunldes ALL")]
//打包所有文件
static void CreateAssetBunldesALL()
{
//删除这个内容相关的缓存文件夹。
Caching.CleanCache();
//在对应的目录位置(StreamingAssets)生成的文件名字为ALL.assetbundle
string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";
//获取在Project视图中选择的所有游戏对象
Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
foreach (Object obj in SelectedAsset)
{
Debug.Log("Create AssetBunldes name :" + obj);
}
//这里注意第二个参数就行
if (BuildPipeline.BuildAssetBundle(null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies))
{
AssetDatabase.Refresh();
}
else { }
}
//“Custom Editor”选项,子目录为“Create Scene”
[MenuItem("Custom Editor/Create Scene")]
//打包场景
static void CreateSceneALL()
{
//清空一下缓存
Caching.CleanCache();
//打包之后保存的路径和文件名称“AssetBundleScene.unity3d”
string Path = Application.dataPath + "/AssetBundleScene.unity3d";
//需要打包的场景文件,名称为"MyScene"
string[] levels = { "Assets/MyScene.unity" };
//打包场景
//参数1:场景名称;参数2:路径;参数3:平台参数4:
BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
//刷新编辑器
AssetDatabase.Refresh();
}
}
3、在Project面板中选择要打包的Prefab文件,点击Custom Editor→Create AssetBunldes Main选项,会在StreamingAssets目录下生成对应数量和文件名称的AssetBunlde文件,后缀名称为“.assetbundle”;选择Custom Editor→Create AssetBunldes ALL选项,打包所有文件会生成一个ALL.assetbundle,该文件内包含选中的所有资源。
打包场景直接点击Custom Editor→Create Scene,在资源目录下生成AssetBundleScene.unity3d文件。