protected bool RedirectHook(string assetBundleName, string assetName, Type type, string manifestAssetBundleName, out AssetBundleLoadAssetOperation result) { string zipPath = $"{manifestAssetBundleName ?? "abdata"}/{assetBundleName.Replace(".unity3d", "")}/{assetName}"; if (type == typeof(Texture2D)) { zipPath = $"{zipPath}.png"; //Only search the archives for a .png that can actually be found if (PngList.TryGetValue(zipPath, out ZipFile archive)) { var entry = archive.GetEntry(zipPath); if (entry != null) { var stream = archive.GetInputStream(entry); var tex = ResourceRedirector.AssetLoader.LoadTexture(stream, (int)entry.Size); if (zipPath.Contains("clamp")) { tex.wrapMode = TextureWrapMode.Clamp; } else if (zipPath.Contains("repeat")) { tex.wrapMode = TextureWrapMode.Repeat; } result = new AssetBundleLoadAssetOperationSimulation(tex); return(true); } } } if (BundleManager.TryGetObjectFromName(assetName, assetBundleName, type, out UnityEngine.Object obj)) { result = new AssetBundleLoadAssetOperationSimulation(obj); return(true); } result = null; return(false); }