Exemple #1
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!");
        }