public override void Execute(Context context) { Dictionary <string, HashSet <string> > assetDependenciesToBundle = context.GetAssetDependenciesToBundle(); StringBuilder stringBuilder = new StringBuilder(); foreach (KeyValuePair <string, HashSet <string> > kv in assetDependenciesToBundle) { string asset = kv.Key; if (kv.Value.Count < 2 || context.IncludedAsset(asset)) { continue; } string extension = Path.GetExtension(asset).ToLower(); if (extension == ".cs") { continue; } if (ExcludeShader && (extension == ".shader" || extension == ".compute")) { continue; } string bundleName; switch (AutoDependenciesBunleType) { case AutoDependenciesBunleType.AllAsset: bundleName = _Name; break; case AutoDependenciesBunleType.SingleAsset: bundleName = $"{_Name}_{AssetDatabase.AssetPathToGUID(asset)}"; break; case AutoDependenciesBunleType.DependencyRepeatedBundle: HashSet <string> bundles = kv.Value; foreach (string bundle in bundles) { stringBuilder.Append(bundle); } bundleName = $"{_Name}_{StringUtility.CalculateMD5Hash(stringBuilder.ToString())}"; stringBuilder.Clear(); break; default: throw new Exception("Not Handle AutoDependenciesBunleType: " + AutoDependenciesBunleType); } context.AddAsset(asset, null, StringUtility.FormatToVariableName(bundleName)); } }
/// <summary> /// <see cref="m_PrefabOverrideModificationMd5"/> /// </summary> private void CaculatePrefabOverrideModification() { if (!UnityEditor.PrefabUtility.HasPrefabInstanceAnyOverrides(gameObject, false)) { m_PrefabOverrideModificationMd5 = string.Empty; } else { List <string> modificationStrings = null; if (m_OwnerMap != null) { modificationStrings = m_OwnerMap.GetStringsCache(); } else { modificationStrings = new List <string>(); } if (m_Prefab == null) { m_Prefab = UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject); } PropertyModification[] modifications = UnityEditor.PrefabUtility.GetPropertyModifications(gameObject); for (int iModification = 0; iModification < modifications.Length; iModification++) { PropertyModification iterModification = modifications[iModification]; bool isOverrideModification; if (iterModification.target == m_Prefab) { isOverrideModification = !Constants.PREFAB_ROOT_GAMEOBJECT_IGNORE_MODIFICATION_PROPERTY_PATHS.Contains(iterModification.propertyPath); } else if (iterModification.target == m_Prefab.transform) { isOverrideModification = !Constants.PREFAB_ROOT_TRANSFORM_IGNORE_MODIFICATION_PROPERTY_PATHS.Contains(iterModification.propertyPath); } else if (CheckChildOverride(iterModification)) { isOverrideModification = false; } else { isOverrideModification = IsPrefabOverrideModification(iterModification); } if (isOverrideModification) { Debug.Log("sceneunit:" + gameObject.name); modificationStrings.Add(Leyoutech.Utility.PrefabUtility.ConvertPrefabPropertyModificationToString(m_Prefab, iterModification)); } } if (modificationStrings.Count > 0) { StringBuilder stringBuilder = StringUtility.AllocStringBuilderCache(); modificationStrings.Sort(); for (int iModification = 0; iModification < modificationStrings.Count; iModification++) { stringBuilder.Append(modificationStrings[iModification]); } modificationStrings.Clear(); m_PrefabOverrideModificationMd5 = StringUtility.CalculateMD5Hash(StringUtility.ReleaseStringBuilderCacheAndReturnString()); } else { m_PrefabOverrideModificationMd5 = string.Empty; } } }