ORK can use assets from different sources, e.g. direct references or asset bundles.
Assets like prefabs, audio clips or textures can come from different sources – every source has their own benefits and drawbacks. ORK Framework supports assets from different sources and can switch between different sources for all assets in your project with a single button click in the ORK editor.
The following asset sources are currently available – the system can be extended by custom scripts by extending from the BaseAssetSource<T> class. Check out the available asset source scripts to see how this can be implemented.
Uses a direct reference to the asset and stores it in the ORK project (or event asset). This is the default and easiest way to use an asset, as it’ll be available in your built-game without any additional work.
The main drawback with direct references, especially in larger projects, is that all references stored in the ORK project will be loaded into memory when ORK is initialized with the game starter, as Unity will simply load all references of an asset. This can lead to long load times for the scene that contains the game starter and huge memory allocations.
Uses assets that are stored in a Resources folder in your Unity project (needs to be somewhere in the Assets folder) and only saves the path of the asset within the folder. Everything in a Resources folder will be added to your built game. Moving or renaming an asset while it’s stored as a Resources asset will lead to losing the asset setup. If a selected asset isn’t stored in a Resources folder, the asset field will be reset (i.e. no selected asset).
While Unity doesn’t recommend using Resources folders (learn more about this here), it’s still an easy way to reduce load time and memory issues coming from direct references and can be useful.
Uses assets that are part of asset bundles. Selecting an asset will automatically define the asset name and asset bundle settings with the asset’s information. If a selected asset isn’t in an asset bundle, the asset field will be reset (i.e. no selected asset).
The asset bundle’s path defines where the bundle will be loaded from in the running game. They can be either loaded from file (using AssetBundle.LoadFromFile) or loaded from memory (using AssetBundle.LoadFromMemory after reading the file’s data using File.ReadAllBytes) – both require your asset bundles to be deployed with your game or downloaded before they’ll be available.
You can download a simple script that will build all asset bundles into the Streaming Assets path here. The script adds 2 new menu items to Unity’s Assets menu – Build AssetBundles will build all asset bundles in your project without any build option, Build AssetBundles Uncompressed will build all asset bundles uncompressed. I’d recommend building uncompressed bundles if you include them in your built game, as this increases the time needed to load them (since Unity doesn’t need to decompress them first).
Everything in the streaming assets path will be added to your built game, so this is a good way to use asset bundles without having to worry about downloading or streaming them to get them into your game. Learn more about asset bundles, how to set them up and how to use them in the Unity manual.
The asset settings can be found in Game > Game Settings in the ORK editor. You can define some basic settings here, e.g. the default path from where asset bundles will be loaded or if resources and asset bundles should be unloaded when changing scenes.
The main usage is the ability to change between different asset sources in your project and event assets. This allows you to e.g. use references while in development and switch to using asset bundles when getting ready to build your game for deployment. Changing asset sources in the project only changes those assets that support the used source, e.g. if an asset is part of an asset bundle, the asset field would automatically update to use the asset bundle the asset is stored in – otherwise, the asset would stay as a reference (or whatever source it currently had).