private static void _ProcessUpdateBundleList(string bundleName, BundleImportData selectData, FilterHandler filter) { BundleData data = BundleDataManager.GetBundleData(bundleName); if (data == null) { return; } for (int i = 0; i < data.includs.Count; ++i) { if (filter == null || filter(data.includs[i])) { _AddToDict(data.name, m_bundleDict); continue; } if (!selectData.Publish) { continue; } string[] dep = AssetDepend.GetDependenciesCache(data.includs[i]); for (int k = 0; k < dep.Length; ++k) { if (!filter(dep[k])) { continue; } if (!BundleDataManager.CheckPathInBundle(dep[k])) { _AddToDict(data.name, m_bundleDict); break; } } } }
private static void ProcessSpecialResource(string path) { if (m_specialCache.ContainsKey(path)) { return; } m_specialCache.Add(path, path); if (EditorPath.IsShader(path)) { if (!BundleDataManager.CheckPathInBundle(path)) { BundleData shader = BundleDataManager.GetBundleData(BundleName.BN_SHADER); if (shader != null && shader.children.Count > 0) { BundleDataManager.AddPathToBundle(path, shader.children[0], 1024); } } } else if (EditorPath.IsMaterial(path)) { BundleData shaderBundle = BundleDataManager.GetBundleData(BundleName.BN_SHADER); if (shaderBundle == null) { return; } UnityEngine.Object[] assetAtPath = AssetDatabase.LoadAllAssetsAtPath(path); foreach (var obj in assetAtPath) { if (obj != null && obj.GetType() == typeof(Material)) { Material mat = obj as Material; if (mat != null && mat.shader != null && !string.IsNullOrEmpty(mat.shader.name)) { if (!shaderBundle.includs.Contains(mat.shader.name)) { shaderBundle.includs.Add(mat.shader.name); } } } if ((!(obj is GameObject)) && (!(obj is Component))) { Resources.UnloadAsset(obj); } } ProcessClear(); } else if (EditorPath.IsScript(path)) { BundleData script = BundleDataManager.GetBundleData(BundleName.BN_SCRIPT); if (script != null && script.children.Count > 0) { BundleDataManager.AddPathToBundle(path, script.children[0], 1024); } } }
private static void _AddPathToBundleByPathConfig(BundleImportData data, string path) { if (data == null || string.IsNullOrEmpty(path) || BundleDataManager.CheckPathInBundle(path)) { return; } string parentName = BundleDataManager.GetIndexBundleName(data.Index); if (data.Type == BundleType.Shader) { parentName = BundleName.BN_SHADER; } string bundleName = BundleDataManager.GetPathBundleName(path); if (!string.IsNullOrEmpty(bundleName)) { BundleData bundleData = BundleDataManager.GetBundleData(bundleName); if (bundleData.parent == parentName) { return; } else { BundleDataManager.RemovePathFromBundle(path, bundleName); } } _AddToDict(bundleName, m_bundleDict); BundleData parent = BundleDataManager.GetBundleData(parentName); if (parent == null) { BundleDataManager.CreateNewBundle(parentName, "", BundleType.None, BundleLoadState.UnLoadOnUnloadAsset); parent = BundleDataManager.GetBundleData(parentName); } string name = ""; for (int i = 0; i < parent.children.Count; ++i) { int index = parent.children.Count - i - 1; BundleData child = BundleDataManager.GetBundleData(parent.children[index]); if (BundleDataManager.IsBundleFull(child, data.LimitCount, data.LimitKBSize * 1024)) { continue; } if (data.Publish && BundleDataManager.IsNameDuplicatedAsset(child, path)) { continue; } name = child.name; break; } if (string.IsNullOrEmpty(name)) { name = BundleDataManager.GenBundleNameByType(data.Type); BundleDataManager.CreateNewBundle(name, parent.name, data.Type, data.LoadState); } long size = CalcPathFileSize(path, data.Type); BundleDataManager.AddPathToBundle(path, name, size); _AddToDict(name, m_bundleDict); }