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