首页 > 代码库 > u3d 场景资源打包

u3d 场景资源打包

搞了一天终于搞定u3d的场景打包,这样就可以不用修改太多程序,把资源放在外部修改了。好处多多

但是本来很简单的东西搞了一天,google来的说作为场景scene。unity 文件 打包成 unityd,结果一直都不行(时间就花在这里了,我相信他)

后来问了别人,别人说看文档,是打包frefab,我一次,一下就行 了,我去

下面是打包的代码

using UnityEngine;using System.Collections;using UnityEditor; public class assetPack : 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 + "/eScene.unity3d";    string[] levels = { "Assets/myScene.unity" };    //打包场景    BuildPipeline.BuildPlayer( levels, Path,BuildTarget.StandaloneWindows, BuildOptions.BuildAdditionalStreamedScenes);    AssetDatabase.Refresh ();}[MenuItem("Custom Editor/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/myScene.unity" };        //打包          BuildPipeline.BuildPlayer(scenes, path, BuildTarget.StandaloneWindows, BuildOptions.BuildAdditionalStreamedScenes);    }    AssetDatabase.Refresh();}[MenuItem("Custom Editor/Save Scene2")]static void ExportResource(){    // Bring up save panel    string path = EditorUtility.SaveFilePanel("Save Resource", "", "New Resource", "unity3d");    if (path.Length != 0)    {        // Build the resource file from the active selection.        Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);        BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path,                          BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);        Selection.objects = selection;    }}}

下面是加载的代码

using UnityEngine;using System.Collections;public class loadScene : MonoBehaviour{    // Use this for initialization    void Start ()    {        StartCoroutine(loadScenee());    }        // Update is called once per frame    void Update () {        }    IEnumerator loadScenee()    {        string path;        path = "file://" + Application.dataPath + "/StreamingAssets/eScene.unity3d";        Debug.Log(path);        WWW www = new WWW(path);        yield return www;        AssetBundle bundle = www.assetBundle;        //GameObject go = bundle.Load("gCube",typeof(GameObject)) as GameObject;        GameObject ObjScene = Instantiate(www.assetBundle.mainAsset) as GameObject;        bundle.Unload(false);           }}

全做记忆