/// <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!"); }