Example #1
0
        public static void BuildAllAssets()
        {
            Manifest manifest = BuilderHelper.LoadManifest();

            List <string> packageFiles = manifest.GetAllPackageFiles();

            BuildPackage(packageFiles, manifest);
        }
        public static void BuildAllAssets()
        {
            // Get all assets.
            List <string> assetsList = new List <string>();

            BuilderHelper.GetAssetsInFolder(BuilderConfig.AssetBasePath, true, assetsList);

            // Todo: Clear useless assets.

            // Extract new assets to manifest.
            ExtractAsset(assetsList);
        }
Example #3
0
        /// <summary>
        /// Builds the package.
        /// </summary>
        /// <param name='packageFiles'>
        /// Package files.
        /// </param>
        /// <param name='manifest'>
        /// Manifest infomation.
        /// </param>
        protected static void BuildPackage(List <string> packageFiles, Manifest manifest)
        {
            // Clear temporary folder.
            Directory.Delete(BuilderConfig.TemporaryPath, true);

            // Build every package.
            foreach (string packageFile in packageFiles)
            {
                List <string> assetFiles  = manifest.GetAllAssetFileInPackage(packageFile);
                List <string> packFiles   = new List <string>();
                List <Object> packObjects = new List <Object>();

                int version = manifest.GetPackageVersion(packageFile);

                foreach (string assetFile in assetFiles)
                {
                    string fromAsset;

                    if (!manifest.GetFromAssetFlag(assetFile, out fromAsset))
                    {
                        Debug.LogErrorFormat("Failed to load asset flag: {0}", assetFile);
                        continue;
                    }

                    // Get asset object.
                    Object assetObject;
                    if (fromAsset == string.Empty)
                    {
                        assetObject = AssetDatabase.LoadAssetAtPath(assetFile, typeof(Object));
                    }
                    else
                    {
                        assetObject = AssetDerivative.GetDerivative(assetFile, fromAsset, manifest);
                    }

                    if (assetObject == null)
                    {
                        Debug.LogErrorFormat("Failed to load asset: {0}", assetFile);
                        continue;
                    }

                    packFiles.Add(assetFile);
                    packObjects.Add(assetObject);
                }

                // Save to asset bundle.
                AssetSaver.SaveObject(BuilderHelper.GetAssetBundlePath(packageFile, version), packObjects.ToArray(), packFiles.ToArray(), true);
            }

            Debug.Log("Build package finished!");
        }
        /// <summary>
        /// Shrinks the game object.
        /// </summary>
        /// <returns>
        /// The game object.
        /// </returns>
        /// <param name='processData'>
        /// Process data.
        /// </param>
        protected static Object ShrinkGameObject(ProcessData processData)
        {
            GameObject gameObject = Object.Instantiate(processData.AssetObject) as GameObject;

            processData.ObjsToDestroy.Add(gameObject);

            Renderer [] renderers = gameObject.GetComponentsInChildren <Renderer>(true);

            foreach (Renderer renderer in renderers)
            {
                renderer.sharedMaterials = new Material[0];
            }

            Animation []      animations      = gameObject.GetComponentsInChildren <Animation>(true);
            List <GameObject> animGameObjects = new List <GameObject>();

            foreach (Animation animation in animations)
            {
                animGameObjects.Add(animation.gameObject);
            }

            foreach (GameObject animObject in animGameObjects)
            {
                GameObject.DestroyImmediate(animObject.GetComponent <Animation>());
                animObject.AddComponent <Animation>();
            }

            // Save the game object to a temp prefab.
            string prefabPath = Path.ChangeExtension(processData.AssetFile, ".prefab");

            prefabPath = BuilderHelper.GetTemporaryFilePath(prefabPath);
            Object gameObjPrefab = PrefabUtility.CreateEmptyPrefab(prefabPath);

            gameObjPrefab = PrefabUtility.ReplacePrefab(gameObject, gameObjPrefab);
            processData.ObjsToDelete.Add(gameObjPrefab);

            return(gameObjPrefab);
        }
Example #5
0
        /// <summary>
        /// Extracts the game object.
        /// </summary>
        /// <param name='assetFile'>
        /// Asset file.
        /// </param>
        /// <param name='assetObject'>
        /// Asset object.
        /// </param>
        /// <param name='manifest'>
        /// Manifest.
        /// </param>
        protected static Object ExtractGameObject(ProcessData processData)
        {
            Object     assetObject     = AssetDatabase.LoadAssetAtPath(processData.AssetFile, typeof(Object));
            GameObject assetGameObject = assetObject as GameObject;

            Renderer [] renderers = assetGameObject.GetComponentsInChildren <Renderer>(true);

            foreach (Renderer renderer in renderers)
            {
                for (int matIndex = 0; matIndex < renderer.sharedMaterials.Length; matIndex++)
                {
                    Material material      = renderer.sharedMaterials[matIndex];
                    string   transformPath = ObjectUtil.GetTransRootPath(renderer.transform);
                    string   matAssetFile  = PathUtil.UnifyPath(AssetDatabase.GetAssetPath(material));
                    bool     b             = processData.ManifestInst.HasAsset(matAssetFile);
                    Debug.Log(b);
                    if (processData.ManifestInst.HasAsset(matAssetFile))
                    {
                        // Add dependent material.
                        processData.ManifestInst.AddDependMatToAsset(processData.AssetFile, matAssetFile, transformPath, matIndex);
                    }
                }
            }

            Animation [] animations = assetGameObject.GetComponentsInChildren <Animation>(true);

            foreach (Animation animation in animations)
            {
                string transformPath = ObjectUtil.GetTransRootPath(animation.transform);

                // Build each animation clip.
                foreach (AnimationState aniState in animation)
                {
                    if (aniState.clip != null)
                    {
                        string aniAssetFile = PathUtil.UnifyPath(AssetDatabase.GetAssetPath(aniState.clip));

                        // It's a binding animation.
                        if (aniAssetFile.Equals(processData.AssetFile))
                        {
                            StringBuilder bd = new StringBuilder(Path.GetDirectoryName(processData.AssetFile));
                            bd.AppendFormat("/{0} {1}", Path.GetFileNameWithoutExtension(processData.AssetFile), aniState.name);

                            aniAssetFile = bd.ToString();

                            if (!processData.ManifestInst.HasAsset(aniAssetFile))
                            {
                                double seconds     = BuilderHelper.GetFileCreateTime(aniAssetFile);
                                string packageFile = processData.ManifestInst.CreateNewPackage(seconds);
                                processData.ManifestInst.AddAssetToPackage(aniAssetFile, 0, processData.AssetFile, packageFile);
                            }
                        }

                        if (processData.ManifestInst.HasAsset(aniAssetFile))
                        {
                            // Add dependent animation.
                            processData.ManifestInst.AddDependAnimToAsset(processData.AssetFile, aniAssetFile, aniState.name, transformPath);
                        }
                    }
                }
            }
            return(null);
        }
        protected static void ExtractAsset(List <string> assetsList)
        {
            // Todo: Get version.
            Dictionary <string, int> assetsWithVersion = new Dictionary <string, int>();

            foreach (string asset in assetsList)
            {
                assetsWithVersion[asset] = Defines.DEF_RES_VERSION;
            }

            // Load current manifest.
            Manifest manifest = BuilderHelper.LoadManifest();

            // Add new asssets.
            foreach (string assetFile in assetsWithVersion.Keys)
            {
                string packageFile;
                int    packageVersion;
                double createTime;

                double seconds = BuilderHelper.GetFileCreateTime(assetFile);

                // Add new asssets.
                if (!manifest.HasAsset(assetFile))
                {
                    packageFile = manifest.CreateNewPackage(seconds);
                    //it not use the version of asset
                    manifest.AddAssetToPackage(assetFile, 0, "", packageFile);
                }
                // Update assets version.
                // TODO
                else
                {
                    manifest.GetAssetPackage(assetFile, out packageFile, out packageVersion, out createTime);
                    if (packageFile.Equals("00001"))
                    {
                        Debug.Log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
                        Debug.Log("createTime:" + createTime);
                        Debug.Log("seconds:" + seconds);
                    }
                    if (createTime < seconds)
                    {
                        packageVersion += 1;
                        manifest.UpdatePackageVersion(packageFile, packageVersion);
                    }
                }
            }

            // Extract asset.
            foreach (string assetFile in assetsWithVersion.Keys)
            {
                AssetManifest.ExtractAsset(assetFile, manifest);
            }

            // Todo: Update package versions.

            // Update manifest file.
            using (StreamWriter outfile = new StreamWriter(PathUtil.CombinePath(Directory.GetCurrentDirectory(), BuilderConfig.ManifestPath), false))
            {
                outfile.Write(manifest.ToXMLString());
            }

            AssetDatabase.Refresh();

            Debug.Log("Build manifest finished!");
        }