unity 多场景unity5 assetbundlee怎么打包

Unity手游之路&十一&资源打包Assetbundle - 坚信移动技术可以改变我们的生活方式 - ITeye技术网站
博客分类:
在手游的运营过程中,更新资源是比不可少的。资源管理第一步是资源打包。传统的打包可以将所有物件制成预设Prefab,打包成场景。今天我们来一起学习官方推荐的Assetbundle,它是Unity(Pro)提供的资源打包策略。利用AssetBundle,可以将几乎所有的资源都打包封装,便于客户端更新下载新的资源。
(转载请注明原文出处)
创建AssetBundle
1.创建一个空的Prefab,命名Cube,然后创建一个Cube,将其拉到刚创建好的Prefab2.新建一个脚本ExportAssetBundles.cs(代码来自官方文档),保存在Asset/Editor目录下
[MenuItem("Assets/Build AssetBundle From Selection")]
static void ExportResourceRGB2()
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "assetbundle");
if (path.Length != 0)
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | pleteAssets, BuildTarget.StandaloneWindows);
这时我们将看到Asset下面出现Build AssetBundle From Selection和Build Scene3.选中预设Cube,运行Build AssetBundle From Selection。这时会弹出一个保存框,将其命名为cube.unity3d(这里为了测试方便,放在c盘。实际项目中,我们是需要将他们放在web服务器,供所有客户端下载更新)4.新建一个场景scene1.unity,上面放置几个模型,然后保存
5.选中该场景,在之前的ExportAssetBundles.cs脚本中添加打包场景的函数,运行Assets-&Build Scene,保存为scene1.unity3d(这里为了测试方便,也放在c盘)
[MenuItem("Assets/Save Scene")]
static void ExportScene()
string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");
if (path.Length != 0)
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
string[] scenes = {"Assets/scene1.unity"};
BuildPipeline.BuildPlayer(scenes,path,BuildTarget.StandaloneWindows,BuildOptions.BuildAdditionalStreamedScenes);
注意事项a.AssetBundle的保存后缀名可以是assetbundle或者unity3db.BuildAssetBundle要根据不同的平台单独打包,BuildTarget参数指定平台,如果不指定,默认的webplayer
加载AssetBundle
我们通过一个简单的代码来演示如何加载assetbundle,包括加载普通asset和场景。
using UnityE
using System.C
public class Load: MonoBehaviour
private string BundleURL = "file:///C:/cube.assetbundle";
private string SceneURL = "file:///C:/scene1.unity3d";
void Start()
Debug.Log(BundleURL);
StartCoroutine(DownloadAssetAndScene());
IEnumerator DownloadAssetAndScene()
using (WWW asset = new WWW(BundleURL))
yield return
AssetBundle bundle = asset.assetB
Instantiate(bundle.Load("Cube"));
bundle.Unload(false);
yield return new WaitForSeconds(5);
using (WWW scene = new WWW(SceneURL))
yield return
AssetBundle bundle = scene.assetB
Application.LoadLevel("scene1");
注意事项a.LoadFromCacheOrDownload 可以指定版本,如果本地版本是新的,将不会从服务器读取b.如果是多个资源打包在一起,我们要通过bundle.Load(),加载特定的资源c.挂载在模型上的脚本也可以一起打包,但是保证脚本在原目录也要存在,否则加载出来无法运行。关于如何更新脚本,我将放在以后的章节中阐述。
AssetBundle依赖关系
如果一个公共对象被多个对象依赖,我们打包的时候,可以有两种选取。一种是比较省事的,就是将这个公共对象打包到每个对象中。这样会有很多弊端:内存被浪费了;加入公共对象改变了,每个依赖对象都得重新打包。AssetBundle提供了依赖关系打包。我们通过一个简单的例子来学习
BuildPipeline.PushAssetDependencies();
var options =
BuildAssetBundleOptions.CollectDependencies |
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("assets/artwork/lerpzuv.tif"),
null, "Shared.unity3d", options);
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("Assets/Artwork/Lerpz.fbx"),
null, "Lerpz.unity3d", options);
BuildPipeline.PopAssetDependencies();
这个文件将共享这些资源,但是后续的资源包将无法继续共享它
BuildPipeline.PushAssetDependencies();
BuildPipeline.BuildAssetBundle(
AssetDatabase.LoadMainAssetAtPath("Assets/Artwork/explosive guitex.prefab"),
null, "explosive.unity3d", options);
BuildPipeline.PopAssetDependencies();
BuildPipeline.PopAssetDependencies();
我们在程序加载的时候必须保证先加载公共对象。否则,只能是在各个对象加载成功后,再通过程序手动添加进来,比较繁琐。在实际项目中,由于是团队开发,对象间的依赖关系通常会比较凌乱,最好在开发周期就定好相关的规范约束,方便管理。
这一节的内容偏实际操作,官方文档和雨松的blog中已经有更加详细介绍。如果大家还有不明白的地方,可以结合文档再实际操作一下。后面的章节,我将花更多的时间介绍核心的内容:资源的增量更新,和代码程序的更新。
/s/1i3BOAPn
1./2./Manual/DownloadingAssetBundles.html
浏览: 212194 次
来自: 北京
大神,,请问,(isChecked)是什么啊?是bboolea ...
zhang 写道大家不要总阅读。欢迎来评论一 ...
写道我在设置如何格式化的时候 总是保存不了
我在设置如何格式化的时候 总是保存不了 不知道楼主有遇到过这种 ...[Unity3d]打包Assetbundle并加载
由于我们要将模型资源放在远程的服务器端,但如果直接放fbx模型是不可以加载的,所以我们可以将fbx做成预设或者是直接将其打包成assetbundle格式的,然后通过www来加载获取。
1.首先要讲一下不同平台下的一个StreamingAssets路径,这是不同的。
//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。
public static readonly string PathURL =
#if UNITY_ANDROID
"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
//平台和web平台
"file://" + Application.dataPath + "/StreamingAssets/";
这就获取到了不同平台的一个路径,我们可以将打包的文件放在这些路径下,然后再从这路径去读取资源。
2.关于打包assetbundle的脚本
using UnityE
using System.C
using UnityE
public class Test : Editor
//打包单个
[MenuItem("Custom Editor/Create AssetBunldes Main")]
static void CreateAssetBunldesMain ()
//获取在Project视图中选择的所有游戏对象
Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
//遍历所有的游戏对象
foreach (Object obj in SelectedAsset)
//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
//StreamingAssets是只读路径,不能写入
//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
Debug.Log(obj.name +"资源打包成功");
Debug.Log(obj.name +"资源打包失败");
//刷新编辑器
AssetDatabase.Refresh ();
[MenuItem("Custom Editor/Create AssetBunldes ALL")]
static void CreateAssetBunldesALL ()
Caching.CleanCache ();
string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";
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 ();
[MenuItem("Custom Editor/Create Scene")]
static void CreateSceneALL ()
//清空一下缓存
Caching.CleanCache();
string Path = Application.dataPath + "/MyScene.unity3d";
[]levels = {"Assets/Level.unity"};
//打包场景
BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
AssetDatabase.Refresh ();
前提要新手动创建一个StreamingAssets文件夹
3.读取资源,这里只举例从本地读取,跟从网络读取是一样的,可以参考官方文档:
/Script/WWW/WWW.html
using UnityE
using System.C
public class RunScript : MonoBehaviour
//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。
public static readonly string PathURL =
#if UNITY_ANDROID
"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
"file://" + Application.dataPath + "/StreamingAssets/";
void OnGUI()
if(GUILayout.Button("Main Assetbundle"))
//StartCoroutine(LoadMainGameObject(PathURL + "Prefab0.assetbundle"));
//StartCoroutine(LoadMainGameObject(PathURL +
"Prefab1.assetbundle"));
StartCoroutine(LoadMainCacheGameObject(PathURL + "Prefab0.assetbundle"));
StartCoroutine(LoadMainCacheGameObject(PathURL +
"Prefab1.assetbundle"));
if(GUILayout.Button("ALL Assetbundle"))
StartCoroutine(LoadALLGameObject(PathURL + "ALL.assetbundle"));
if(GUILayout.Button("Open Scene"))
StartCoroutine(LoadScene());
//读取一个资源
private IEnumerator LoadMainGameObject(string path)
WWW bundle = new WWW(path);
//加载到游戏中
yield return Instantiate(bundle.assetBundle.mainAsset);
bundle.assetBundle.Unload(false);
//读取全部资源
private IEnumerator LoadALLGameObject(string path)
WWW bundle = new WWW(path);
//通过Prefab的名称把他们都读取出来
bundle.assetBundle.Load("Prefab0");
bundle.assetBundle.Load("Prefab1");
//加载到游戏中
yield return Instantiate(obj0);
yield return Instantiate(obj1);
bundle.assetBundle.Unload(false);
private IEnumerator LoadMainCacheGameObject(string path)
WWW bundle = WWW.LoadFromCacheOrDownload(path,5);
//加载到游戏中
yield return Instantiate(bundle.assetBundle.mainAsset);
bundle.assetBundle.Unload(false);
private IEnumerator LoadScene()
WWW download = WWW.LoadFromCacheOrDownload ("file://"+Application.dataPath + "/MyScene.unity3d", 1);
var bundle = download.assetB
Application.LoadLevel ("Level");
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'客户端资源更新AssetBundle打包详解(资源冗余和AssetBundle颗粒大小)
Unity在做资源更新时肯定少不了AssetBundle,AssetBundle有太多太多的坑,需要自己慢慢踩,在这我给大家分享下AssetBundle打包时资源冗余和AssetBundle颗粒大小的权衡方面的内容,希望遇到同样问题的同学们顶起来,把你们的想法和问题发出来大家一起来讨论,我会将最新的内容试试更新上来
726 || this.offsetHeight>700){if(this.offsetWidth/726 > this.offsetHeight/700){this.width=726;}else{this.height=700;}}" style="max-width:726max-height:700" title="点击查看原图" onclick="if(this.parentNode.tagName!='A') window.open('/forum/attachment/1510/thread/7_ef1bcde5f693.png');" />
关于这方面不错的一些博文
本部分内容设定了隐藏,需要回复后才能看到
要评论请先&或者&
Thank you for shared!
看看。。。。
看看......
seeeeeeeeeeeeeeeeeeeeedddddddddddddddd
Thank you for shared!
感谢分享~~~~~~~~~
嗯,好资源,感谢分享当前位置: >
Assetbundle打包工具类
时间: 08:54 来源:Unity之家 作者:unity.jb51.net 浏览:
直接贴代码:using&UnityE
using&System.C
using&UnityE
public&class&Test&:&Editor
&&&&[MenuItem(&Custom&Editor/Create&AssetBunldes&Main&)]
&&&&static&void&CreateAssetBunldesMain&()
&&&&&&&&//获取在Project视图中选择的所有游戏对象
&&&&&&&&Object[]&SelectedAsset&=&Selection.GetFiltered&(typeof(Object),&SelectionMode.DeepAssets);
&&&&&&&&//遍历所有的游戏对象
&&&&&&&&foreach&(Object&obj&in&SelectedAsset)&
&&&&&&&&&&&&//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
&&&&&&&&&&&&//StreamingAssets是只读路径,不能写入
&&&&&&&&&&&&//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
&&&&&&&&&&&&string&targetPath&=&Application.dataPath&+&&/StreamingAssets/&&+&obj.name&+&&.assetbundle&;
&&&&&&&&&&&&if&(BuildPipeline.BuildAssetBundle&(obj,&null,&targetPath,&BuildAssetBundleOptions.CollectDependencies))&{
&&&&&&&&&&&&&&&&Debug.Log(obj.name&+&资源打包成功&);
&&&&&&&&&&&&}&
&&&&&&&&&&&&else
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Debug.Log(obj.name&+&资源打包失败&);
&&&&&&&&&&&&}
&&&&&&&&//刷新编辑器
&&&&&&&&AssetDatabase.Refresh&();&&&
&&&&&&&&&&
&&&&[MenuItem(&Custom&Editor/Create&AssetBunldes&ALL&)]
&&&&static&void&CreateAssetBunldesALL&()
&&&&&&&&&&
&&&&&&&&Caching.CleanCache&();
&&&&&&&&string&Path&=&Application.dataPath&+&&/StreamingAssets/ALL.assetbundle&;
&&&&&&&&&&
&&&&&&&&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&{
&&&&&&&&&&&&&&
&&&&[MenuItem(&Custom&Editor/Create&Scene&)]
&&&&static&void&CreateSceneALL&()
&&&&&&&&//清空一下缓存
&&&&&&&&Caching.CleanCache();
&&&&&&&&string&Path&=&Application.dataPath&+&&/MyScene.unity3d&;
&&&&&&&&string&&[]levels&=&{&Assets/Level.unity&};
&&&&&&&&//打包场景
&&&&&&&&BuildPipeline.BuildPlayer(&levels,&Path,BuildTarget.WebPlayer,&BuildOptions.BuildAdditionalStreamedScenes);
&&&&&&&&AssetDatabase.Refresh&();
}OK。赶快去测试下吧。。。
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ??????
其他类型的Unity入门 ??????蓬莱仙羽 的BLOG
用户名:蓬莱仙羽
文章数:533
评论数:71
访问量:36871
注册日期:
阅读量:5863
阅读量:12276
阅读量:363354
阅读量:1058862
51CTO推荐博文
通常在游戏执行过程中,并不希望一次将全部的资源都载入。而是在资源被使用的时候载入,以免占用过多的存储空间。所以我们可能会尽量规划好不同功能的场景,在需要的时候才载入场景并释放掉前个场景中不需要的资源。或是将资源放在Resources文件下,在需要使用的时候用Resources.Load()方法把资源载入。这些者是不错的管理方法,但是当我们游戏中的资源相当多时,输出的程序文件还是会很大。而且如果是时常会更新内容资源的游戏,也会因为过大的资源造成编译输出过长的后果,特别是手机或是网页游戏。最后编译出来的只是一个文件,如果文件非常大,将可能造成下载或启动游戏的不方便;这时候我们可能就要考虑制作AssetBundle。
制作游戏时,将资源和主程序部分分离的话,可以得到某种程度的好处,我们可以让游戏主程序只管理游戏的逻辑部分。当需要某些资源则从外部的AssetBundle载入资源,这样一来,如果有任何游戏更新只是添加或更换资源,并没有变更到程序的逻辑部分。只需要重新打包资源就可以完成更新,而不需要重新编译主程序并重新发布。
例如我们有已上架的iPhone游戏,因为特定节日想把游戏内的图片换成另一种气氛。通常必须要重新输出,然后送审。等到节日过后又想把图片换回原本的,要再次编译新的程序,再送审,一方面送审费时费工,另一方面是从送审到架上游戏更新完成的时间,我们并不能准确掌控;如果事先将资源分离打包成AssetBundle存储在我们自己管理的服务器上,在这种需要换图的时刻,只需要将自己服务器上的AssetBundle更新即可,可以省掉不断送审的麻烦,时间上也更能掌控,另外就是游戏主程序中没有大的资源,主程序会小一点,那么玩家要下载我们的游戏也会更快速一些。
还有就是,我们编译网页游戏时一定会发现,编译出来的只是一个html文件和一个unity3d文件。写过网页的人都知道,网页的运作是浏览器将网页中的文件、图片、音乐、视频等等下载到客户端暂存之后再执行呈现出结果,那么如果我们游戏内容的庞大资源与主程序编在一起的话,那么编译出来的unity3d文件也会很大,此时我们可能要思考一下,我们希望玩家花多久时间完成启动页面再进行游戏呢?也许,Unity的Web Player有办法解决这个问题使玩家不会花太多时间启动页面(传说中流模式),但是正因为网页游戏运作方式是如此,所以当我们在服务器更新时,玩家只要没有重新载入页面,玩到的游戏内容始终是旧版的,此时又要考虑到,如果没有更新游戏逻辑或内容规则的情况下,是否有必要强制玩家中断游戏重新载入页面;如果将资源打包成AssetBundle分离出来,那么unity3d文件这个主程序的部分将会变得比较小,而当有任何资源更新时只需要在服务器端将AssetBundle换掉,玩家不需要重新载入页面,一样能体验到更新后的内容。
以上写了一大堆,主要就是要说明AssetBundle是个很重要又很好用的东西,毕竟在没变更程序或游戏部署的情况下, 没必要去重新编译游戏主程序,以下就来说明如何制作AssetBundle:
首先要使用[Unity插件:自定义菜单命令]的方法自定义菜单命令,使我们能够何时去打包。接下来我们需要能够指定哪些资源进行打包,所以需要使用到Editor class的Selection.GetFiltered(),还有就是要过滤哪些类辊的资源才是我们要的,选择错误略过不处理,最后使用BuildPipeline.BuilAssetBundle()建立AssetBundle即可,以下范例会在Unity项目目录下建立_AssetBundle目录用来存放打包好的AssetBundle,打包的目标为GameObject,
Texture2D, Material三种类别的资源,如果存储文件路径名相同则会先删除旧文件。
[MenuItem(&Custom Editor/Create AssetBunldes&)]
static void ExecCreateAssetBunldes() {
// AssetBundle 的目录名及扩展名
string targetDir = “_AssetBunldes”;
string extensionName = “.assetBundles”;
//取得在 Project 视图中选择的资源(包含子目录中的资源)
Object[] SelectedAsset = Selection.GetFiltered(typeof (Object), SelectionMode.DeepAssets);
//建立存放 AssetBundle 的目录
if(!Directory.Exists(targetDir)) Directory.CreateDirectory(targetDir);
foreach(Object obj in SelectedAsset){
// 资源文件的路径
string sourcePath = AssetDatabase.GetAssetPath(obj);
// AssetBundle 存储路径
string targetPath = targetDir + Path.DirectorySeparatorChar + obj.name + extensionN
if(File.Exists(targetPath)) File.Delete(targetPath);
if(!(obj is GameObject) && !(obj is Texture2D) && !(obj is Material))
//建立 AssetBundle
if(BuildPipeline.BuildAssetBundle(obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)){
Debug.Log(obj.name + “建立完成”);
Debug.Log(obj.name + “建立失败”);
以上是直接将选择的资源打包成AssetBundle,另外,你也可以在打包前,依需求创建好GameObject并添加Component,建立prefab,最后再以Prefab打包成assetBundle,一切看个人如何运用了。
制作好AssetBundle最终目的还是要在游戏中载入,以下用简短范例在游戏画面上显示一个按钮,当按下按钮之后载入类别为GameObject的AsseBundle并利用Instantiate()使其实例化而在场景中产生GameObject。
void OnGUI(){
if(GUI.Button(new Rect(5,35,100,25) , “Load GameObject”)) {
StartCoroutine(LoadGameObject());
private IEnumerator LoadGameObject() {
// AssetBundle 文件路径
string path = string.Format(“file://{0}/../_AssetBunldes/{1}.assetBunldes” , Application.dataPath , “TestGameObject”);
// 载入 AssetBundle
WWW bundle = new WWW(path);
//等待载入完成
//实例化 GameObject并等待作业完成
yield return Instantiate(bundle.assetBundle.mainAsset);
//卸载 AssetBundle
bundle.assetBundle.Unload(false);
上面代码上AssetBundle文件路径path是以在Editor中实行为例,具体平台要按实际平台来写。因为载入的资源必须要等待载入完成以确保游戏运作正常,在C#中使用yield除了返回类型要是IEnumerator之外,调用时也必须使用StartCoroutine()调用,如果使用Javascript则可直接调用函数。如果AssetBundle已载入过,下次再请求载入将会出现[The asset bundle ‘文件名’ can’t be loaded because another asset bundle
with the same files are already loaded]的错误信息,所以必须在每次载入使用完后,将AssetBundle卸载;另外,要特别注意的是载入AssetBundle到卸载期间可能消耗些微时间,如果连续调用载入同一个AssetBundle,造成在卸载前重复载入也可能出现前面的错误,所以,最好是能定义些变量,记录载入的AssetBundle有哪些,避免重复载入。
打包的脚本:
using UnityE using System.C using UnityE
public class Test : Editor {
[MenuItem(&Custom Editor/Create AssetBunldes Main&)]
static void CreateAssetBunldesMain ()
//获取在Project视图中选择的所有游戏对象
Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
//遍历所有的游戏对象
foreach (Object obj in SelectedAsset)
//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
//StreamingAssets是只读路径,不能写入
//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
string targetPath = Application.dataPath + &/StreamingAssets/& + obj.name + &.assetbundle&;
if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
Debug.Log(obj.name +&资源打包成功&);
Debug.Log(obj.name +&资源打包失败&);
//刷新编辑器
AssetDatabase.Refresh ();
[MenuItem(&Custom Editor/Create AssetBunldes ALL&)]
static void CreateAssetBunldesALL ()
Caching.CleanCache ();
string Path = Application.dataPath + &/StreamingAssets/ALL.assetbundle&;
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 ();
[MenuItem(&Custom Editor/Create Scene&)]
static void CreateSceneALL ()
//清空一下缓存
Caching.CleanCache();
string Path = Application.dataPath + &/MyScene.unity3d&;
[]levels = {&Assets/Level.unity&};
//打包场景
BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
AssetDatabase.Refresh ();
加载脚本:
private IEnumerator LoadScene()
WWW download = WWW.LoadFromCacheOrDownload(&http://192.168.1.200/xiaowei/dxw.assetbundle&, 1);
//var bundle = download.assetB
//yield return Instantiate(download.assetBundle.mainAsset);
//GameObject obj = (GameObject)download.assetBundle.Load(&dxw&);
if (download.assetBundle.Contains(&dxw&))
obj = (GameObject)download.assetBundle.Load(&dxw&);
print(obj);
obj.transform.Rotate(new Vector3(0,0,360));
//Application.LoadLevel(&Level&);
//卸载 AssetBundle
//download.assetBundle.Unload(false);
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 unity assetbundle 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信