using System.Collections; using UnityEngine; using UnityEngine.UI; using CustomAssetBundleSystem; /// /// Example integration: Replace Addressables with custom AssetBundle system /// Drop-in replacement for your existing SceneLoader /// public class CustomAssetBundleSceneLoader : MonoBehaviour { [Header("UI References (Optional)")] public Slider progressSlider; public Text statusText; [Header("Settings")] public bool initializeOnStart = true; private bool isInitialized = false; void Start() { if (initializeOnStart) { StartCoroutine(InitializeAndLoadGameScene()); } } /// /// Initialize the AssetBundle system and load Game scene /// Call this instead of Addressables.InitializeAsync() /// public IEnumerator InitializeAndLoadGameScene() { UpdateStatus("Initializing AssetBundle system..."); // Initialize the catalog yield return RemoteAssetBundleManager.Instance.InitializeAsync(); if (!RemoteAssetBundleManager.Instance.IsInitialized) { UpdateStatus("✗ Failed to initialize AssetBundle system"); Debug.LogError("[CustomAssetBundleLoader] Initialization failed!"); yield break; } isInitialized = true; UpdateStatus("✓ AssetBundle system initialized"); // Optional: Show catalog info var catalog = RemoteAssetBundleManager.Instance.GetCatalog(); Debug.Log($"[CustomAssetBundleLoader] Catalog version: {catalog.version}"); Debug.Log($"[CustomAssetBundleLoader] Available bundles: {catalog.bundles.Count}"); // Load the Game scene yield return LoadGameScene(); } /// /// Load the Game scene from remote AssetBundle /// public IEnumerator LoadGameScene() { if (!isInitialized) { Debug.LogError("[CustomAssetBundleLoader] Not initialized! Call InitializeAndLoadGameScene() first."); yield break; } UpdateStatus("Loading Game scene..."); bool sceneLoaded = false; // Subscribe to download progress RemoteAssetBundleManager.Instance.OnBundleDownloadProgress += (bundleName, progress) => { UpdateProgress(progress); UpdateStatus($"Downloading {bundleName}: {progress * 100:F1}%"); }; // Load the scene yield return RemoteAssetBundleManager.Instance.LoadSceneAsync("Game", (success) => { sceneLoaded = success; }); if (sceneLoaded) { UpdateStatus("✓ Game scene loaded!"); Debug.Log("[CustomAssetBundleLoader] ✓ Game scene loaded successfully!"); } else { UpdateStatus("✗ Failed to load Game scene"); Debug.LogError("[CustomAssetBundleLoader] ✗ Failed to load Game scene!"); } } /// /// Load any scene by name /// public void LoadScene(string sceneName) { StartCoroutine(LoadSceneCoroutine(sceneName)); } private IEnumerator LoadSceneCoroutine(string sceneName) { if (!isInitialized) { Debug.LogError("[CustomAssetBundleLoader] Not initialized!"); yield break; } UpdateStatus($"Loading {sceneName}..."); bool success = false; yield return RemoteAssetBundleManager.Instance.LoadSceneAsync(sceneName, (loaded) => { success = loaded; }); if (success) { UpdateStatus($"✓ {sceneName} loaded!"); } else { UpdateStatus($"✗ Failed to load {sceneName}"); } } #region UI Helpers private void UpdateProgress(float progress) { if (progressSlider != null) { progressSlider.value = progress; } } private void UpdateStatus(string message) { if (statusText != null) { statusText.text = message; } Debug.Log($"[CustomAssetBundleLoader] {message}"); } #endregion #region Public API - Replace your existing SceneLoader calls /// /// Check if the system is ready (replaces Addressables initialization check) /// public bool IsReady() { return RemoteAssetBundleManager.Instance.IsInitialized; } /// /// Get memory usage info /// public string GetMemoryInfo() { return RemoteAssetBundleManager.Instance.GetMemoryStats(); } /// /// Unload all bundles to free memory /// public void UnloadAllBundles() { RemoteAssetBundleManager.Instance.UnloadAllBundles(true); } #endregion }