zoukankan      html  css  js  c++  java
  • 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);
    
           
    
        }
    }

    全做记忆

  • 相关阅读:
    kettle plugin 插件开发
    eclipse插件hibernate tools安装
    全面总结Java泛型 使用案例
    向刚工作的人解释什么叫工作!
    Hibernate 的HQL,QBC 查询语言
    JQuery Highcharts图表控件使用说明
    JSP 的脚本,指令,动作
    ODI OWB 特性比较说明
    Win32 框架文档视图(3)
    Win32 框架文档视图(2)
  • 原文地址:https://www.cnblogs.com/dragon2012/p/3845442.html
Copyright © 2011-2022 走看看