コード例 #1
0
        void BundleSingleBatch()
        {
            TextAsset Scene = AssetDatabase.LoadAssetAtPath("Assets/Models/ABSingle.txt", typeof(TextAsset)) as TextAsset;

            if (Scene == null)
            {
                return;
            }

            listSingleBatch.Clear();
            listSingleBatch = ABTools.GetContent(new MemoryStream(Scene.bytes));

            scrollPosSingle = GUILayout.BeginScrollView(scrollPosSingle, GUILayout.ExpandWidth(true));

            foreach (string e in listSingleBatch)
            {
                GUILayout.Label(e, GUILayout.ExpandWidth(true));
            }

            GUILayout.EndScrollView();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Pack Single Bundle", GUILayout.ExpandWidth(true)))
            {
                ABBatch.ReadNormal(listSingleBatch);
            }
            GUILayout.EndHorizontal();
        }
コード例 #2
0
        bool CreateAssetBunldesALL(Object[] SelectedAsset, string targetPath, BuildTarget BT)
        {
            foreach (Object o in SelectedAsset)
            {
                if (ABTools.MissingMono(o))
                {
                    return(false);
                }
            }

            if (SelectedAsset == null || SelectedAsset.Length == 0)
            {
                //EditorUtility.DisplayDialog("AssetBunlde", "Nothing is Selected", "Close");
                Debuger.LogError("Nothing is Selected or targetPath is invalid");

                return(false);
            }

            if (File.Exists(targetPath))
            {
                //if (EditorUtility.DisplayDialog("AssetBunlde", "Target is Exist, Is Delete?", "Delete", "No Delete"))
                {
                    File.Delete(targetPath);

                    AssetDatabase.Refresh();
                }
            }

            if (BuildPipeline.BuildAssetBundle(null,
                                               SelectedAsset,
                                               targetPath,
                                               BuildAssetBundleOptions.CollectDependencies,
                                               BT))
            {
                AssetDatabase.Refresh();

                return(true);
            }
            else
            {
                AssetDatabase.Refresh();

                return(false);
            }
        }
コード例 #3
0
        /// <summary>
        /// 针对传入的硬盘对象,创建一个纹理配置文件asset
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        void DecomposeMaterialAsset(Object obj)
        {
            //  输出目录
            string folder = AssetDatabase.GetAssetPath(obj);

            folder = Path.GetDirectoryName(folder);

            //
            ArrayList listMatNames = new ArrayList();
            Dictionary <string, int> dicListMatNames = new Dictionary <string, int>();

            GameObject characterClone = (GameObject)Object.Instantiate(obj);

            characterClone.name = obj.name;

            //  搜寻所有的MeshRender.
            foreach (MeshRenderer ren in characterClone.GetComponentsInChildren <MeshRenderer>())
            {
                {
                    //  sharedMaterials
                    if (ren.sharedMaterials != null)
                    {
                        int count = ren.sharedMaterials.Length;

                        for (int i = count - 1; i >= 0; i--)
                        {
                            Material m = (Material)ren.sharedMaterials[i];

                            if (m == null)
                            {
                                Debug.LogError("Missing " + ren.gameObject.name + " -> Material in " + characterClone.name);
                            }
                            else
                            {
                                //Debug.Log(characterClone.name + "/" + ren.gameObject.name + "/" + m.name);

                                StringPrefabMaterial prefabmat = new StringPrefabMaterial();
                                //  挂载的对象.
                                prefabmat.meshrendererGameObject = ABTools.GetParentPath(ren.gameObject) + "_" + ren.gameObject.GetInstanceID();
                                //
                                ren.gameObject.name += "_" + ren.gameObject.GetInstanceID();
                                //  资源名称.
                                prefabmat.assetname = m.name;
                                //  资源对象.
                                prefabmat.assetbundlePath = GetDepencyPath(m.name, ren.gameObject);
                                //  纹理的AB.
                                prefabmat.assetbundlePath = CreateMaterialAB(prefabmat.assetbundlePath);

                                listMatNames.Add(prefabmat);

                                //	Count Times
                                int curcount = -1;

                                if (dicListMatNames.TryGetValue(prefabmat.assetbundlePath, out curcount))
                                {
                                    curcount++;
                                }
                                else
                                {
                                    curcount = 1;
                                }

                                dicListMatNames[prefabmat.assetbundlePath] = curcount;
                            }
                        }

                        ren.sharedMaterials = new Material[0];
                    }
                }
            }


            //  创建一个不带Material的Prefab.
            string nomaterialscenePath = folder + "/" + obj.name + "_nomaterial.prefab";
            Object o = PrefabUtility.CreateEmptyPrefab(nomaterialscenePath);

            PrefabUtility.ReplacePrefab(characterClone, o);

            //{
            //    //
            //    ArrayList listLightmaps = new ArrayList();

            //    Renderer[] rs = characterClone.GetComponentsInChildren<Renderer>();
            //    foreach (Renderer r in rs)
            //    {
            //        StringPrefabLightmap slmp = new StringPrefabLightmap();
            //        slmp.lightmapIndex = r.lightmapIndex;
            //        slmp.lightmapScaleOffset = r.lightmapScaleOffset;

            //        Debug.Log(r.gameObject.name + " " + r.lightmapIndex + " " + r.lightmapScaleOffset);

            //        listLightmaps.Add(slmp);
            //    }

            //}

            //  创建配置文件
            StringPrefab holder = ScriptableObject.CreateInstance <StringPrefab>();

            holder.material = (StringPrefabMaterial[])listMatNames.ToArray(typeof(StringPrefabMaterial));
            //holder.lightmap = (StringPrefabLightmap[])listLightmaps.ToArray(typeof(StringPrefabLightmap));
            string materialassetPath = folder + "/" + obj.name + "_material.asset";

            AssetDatabase.CreateAsset(holder, materialassetPath);

            //
            string txtPath = mDestFolder + "/" + obj.name + ".txt";
            string content = string.Empty;

            foreach (KeyValuePair <string, int> e in dicListMatNames)
            {
                content += e.Value;
                content += "\t";
                content += e.Key;
                content += "\r\n";
            }
            File.WriteAllText(txtPath, content);

            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh();

            GameObject.DestroyImmediate(characterClone);

            nomaterialscene = (GameObject)AssetDatabase.LoadAssetAtPath(nomaterialscenePath, typeof(GameObject));
            materialasset   = (StringPrefab)AssetDatabase.LoadAssetAtPath(materialassetPath, typeof(StringPrefab));
        }
コード例 #4
0
        public void ExecCreateAssetBunldes()
        {
            //取得在 Project 视图中选择的资源(包含子目录中的资源)
            Object[] SelectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
            if (SelectedAsset == null)
            {
                EditorUtility.DisplayDialog("AssetBunlde", "Nothing is Selected", "Close");

                return;
            }

            foreach (Object obj in SelectedAsset)
            {
                if (ABTools.MissingMono(obj))
                {
                    continue;
                }

#if UNITY_IPHONE
                string targetPath = ABConfig.OutputFolderIPhone + obj.name + ABConfig.extensionName;
#elif UNITY_STANDALONE_WIN
                string targetPath = ABConfig.OutputFolderWindows32 + obj.name + ABConfig.extensionName;
#elif UNITY_ANDROID
                string targetPath = ABConfig.OutputFolderAndroid + obj.name + ABConfig.extensionName;
#else
                string targetPath = ABConfig.OutputFolderWindows32 + obj.name + ABConfig.extensionName;
#endif  //	UNITY_STANDALONE_WIN

                if (File.Exists(targetPath))
                {
                    File.Delete(targetPath);
                }

#if UNITY_IPHONE
                //建立 AssetBundle
                if (BuildPipeline.BuildAssetBundle(obj,
                                                   null,
                                                   targetPath,
                                                   BuildAssetBundleOptions.CollectDependencies,                                                     // | BuildAssetBundleOptions.CompleteAssets,
                                                   BuildTarget.iPhone))
                {
                    Debuger.Log(targetPath + "建立完成");
                }
                else
                {
                    Debuger.LogError(obj.name + "建立失败");
                }
#elif UNITY_STANDALONE_WIN
                //建立 AssetBundle
                if (BuildPipeline.BuildAssetBundle(obj,
                                                   null,
                                                   targetPath,
                                                   BuildAssetBundleOptions.CollectDependencies,                                                     // | BuildAssetBundleOptions.CompleteAssets,
                                                   BuildTarget.StandaloneWindows))
                {
                    Debuger.Log(targetPath + "建立完成");
                }
                else
                {
                    Debuger.LogError(obj.name + "建立失败");
                }
#elif UNITY_ANDROID
                //建立 AssetBundle
                if (BuildPipeline.BuildAssetBundle(obj,
                                                   null,
                                                   targetPath,
                                                   BuildAssetBundleOptions.CollectDependencies, // | BuildAssetBundleOptions.CompleteAssets,
                                                   BuildTarget.Android))
                {
                    Debuger.Log(targetPath + "建立完成");
                }
                else
                {
                    Debuger.LogError(obj.name + "建立失败");
                }
#endif  //	UNITY_STANDALONE_WIN
                AssetDatabase.Refresh();
            }

            EditorUtility.DisplayDialog("AssetBunlde", "BuildTarget.StandaloneWindows Over", "Close");
        }
コード例 #5
0
        static void CreateFromPrefab_Scene(PLATFORM p)
        {
            Debug.Log("CreateAssetbundles CreateFromPrefab_Scene");

            CreateAssetBundlePath();

            ArrayList listMatNames = new ArrayList();

            foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets))
            {
                // filters
                if (!(obj is GameObject))
                {
                    continue;
                }
                //
                GameObject characterClone = (GameObject)Object.Instantiate(obj);

                characterClone.name = obj.name;

                //  搜寻所有的MeshRender.
                foreach (MeshRenderer ren in characterClone.GetComponentsInChildren <MeshRenderer>())
                {
                    {
                        //  sharedMaterials
                        if (ren.sharedMaterials != null)
                        {
                            int count = ren.sharedMaterials.Length;

                            for (int i = count - 1; i >= 0; i--)
                            {
                                Material m = (Material)ren.sharedMaterials[i];

                                if (m == null)
                                {
                                    Debug.LogError("Missing " + obj.name + " -> Material");
                                }
                                else
                                {
                                    //Debug.Log(characterClone.name + "/" + ren.gameObject.name + "/" + m.name);

                                    StringPrefabMaterial prefabmat = new StringPrefabMaterial();
                                    //  资源名称.
                                    prefabmat.assetname = m.name;
                                    //  挂载的对象.
                                    prefabmat.meshrendererGameObject = ABTools.GetParentPath(ren.gameObject);
                                    //  资源对象.
                                    prefabmat.assetbundlePath = GetDepencyPath(m.name);

                                    listMatNames.Add(prefabmat);
                                }
                            }

                            ren.sharedMaterials = new Material[0];
                        }
                    }
                }

                //  创建一个不带Material的Prefab.
                Object o = PrefabUtility.CreateEmptyPrefab(ASSETBUNDLE_PATH + "/" + obj.name + "_nomaterial.prefab");
                PrefabUtility.ReplacePrefab(characterClone, o);

                //  创建配置文件
                StringPrefab holder = ScriptableObject.CreateInstance <StringPrefab>();
                holder.material = (StringPrefabMaterial[])listMatNames.ToArray(typeof(StringPrefabMaterial));
                AssetDatabase.CreateAsset(holder, ASSETBUNDLE_PATH + "/" + obj.name + "_material.asset");

                GameObject.DestroyImmediate(characterClone);
            }
        }