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));
            }
        }
示例#2
0
        /// <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;
                }
            }
        }