private IEnumerator Start() { // The name of the bundle is loaded from the static information file bundleName = StaticInformation.ThemeName; #if DEBUG // If the theme name is empty, set theme default to light theme if (bundleName.Equals("")) { bundleName = "lighttheme"; } #else if (bundleName.Equals("")) { bundleName = "lighttheme"; } #endif // A requse to load the asset bundle is made AssetBundleCreateRequest asyncBundleRequest = AssetBundle.LoadFromFileAsync( Path.Combine(Application.streamingAssetsPath, bundleName)); yield return(asyncBundleRequest); // Get the loaded asset bundle AssetBundle localAssetBundle = asyncBundleRequest.assetBundle; // Throw an error when the loaded asset bundle is empty if (localAssetBundle == null) { Debug.LogError("Failed to load asset bundle of type " + bundleName); yield break; } // initialize asset request variable AssetBundleRequest assetRequest; // Load required dependencies assetRequest = localAssetBundle.LoadAssetAsync <GameObject>(DependencyManagerName); yield return(assetRequest); // Load the dependencies for other to access and prepare the data GameObject dependencyManagerObject = assetRequest.asset as GameObject; dependencies = dependencyManagerObject.GetComponent <ThemeDependencies>(); dependencies.PrepareAsset(); // Loads Pong asset and instantiates that as a child assetRequest = localAssetBundle.LoadAssetAsync <GameObject>(PongAssetName); yield return(assetRequest); GameObject PongAsset = assetRequest.asset as GameObject; CheckDependecies(PongAsset, ThemeDependencies.DepedencyTags.Pong); Instantiate(PongAsset, Pong.transform); // Loads Paddle asset and instantiates that as a child assetRequest = localAssetBundle.LoadAssetAsync <GameObject>(PaddleAssetName); yield return(assetRequest); GameObject PaddleAsset = assetRequest.asset as GameObject; CheckDependecies(PongAsset, ThemeDependencies.DepedencyTags.Paddle); Instantiate(PaddleAsset, Paddle.transform); // Loads background asset and instantiates that as a child assetRequest = localAssetBundle.LoadAssetAsync <GameObject>(BackgroundAssetName); yield return(assetRequest); GameObject BackgroundAsset = assetRequest.asset as GameObject; CheckDependecies(BackgroundAsset, ThemeDependencies.DepedencyTags.Background); Instantiate(BackgroundAsset, Background.transform); // Load orb asset and request orbmanager to add the asset as a child of orb assetRequest = localAssetBundle.LoadAssetAsync <GameObject>(OrbAssetName); yield return(assetRequest); GameObject OrbAsset = assetRequest.asset as GameObject; CheckDependecies(OrbAsset, ThemeDependencies.DepedencyTags.Orb); orbManager.AddOrbAsset(OrbAsset); // Unload asset bundle (keeping the loaded assets) localAssetBundle.Unload(false); // Todo: replace these with theme has loaded event orbManager.RequestNewOrb(); }