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);

       

    }
}

全做记忆

原文地址:https://www.cnblogs.com/dragon2012/p/3845442.html