Azure Storage Bird
This is a Sandbox project. The content in this article is unsupported, and therefore may be out of date or not in a working state. That said, we still think it was awesome enough to include here. Enjoy!
This sample game project demonstrates downloading files at runtime from Azure Storage using the Azure Storage SDK for Unity. This is useful for reducing the initial download size of your app. This approach could be adapted for a variety of purposes, such as updating game content without rebuilding and resubmitting the game, or adding new content to a live game.
Because music files typically are among the largest data files in games, the sample game has been designed to leverage several music assets. As the player progresses in the game, the background music changes, providing a good use case for downloading assets at runtime with the Azure Storage SDK.
- Unity 2017.1 (or greater)
- Unity 2017.1 includes a new scripting runtime that supports .NET 4.6. This feature allows use of the existing Azure SDKs with some tweaks. Please see this blog post from Unity for more information.
- Unity 2018.2 (or greater) is required for HTTPS connections. The project will work without HTTPS for Unity versions 2017.1 through 2018.1.
- An Azure subscription (create for free!)
The Azure Storage SDK for Unity is considered experimental. As such, this may not build and run on every single Unity platform. Please see the Azure Storage SDK compatibility list for a list of known working platforms and issues.
Create a container called
The sample project is hard coded to look in a block blob container called
music and use the specific file names included in the sample music zip file (
Track10.ogg). If you use differently named files, or only upload some of the files, you will need to modify the sample project's code accordingly.
Download the sample Unity project
Clone or download the project from the AzureSamples-Unity repository on GitHub.
- On the GitHub site, click the Clone or download button to get a copy of the project to work with.
- This project is located within the
The project comes with the Azure Storage for Unity SDK included. To learn more, including how to import the SDK into new projects, you can visit the SDK documentation.
Set scripting runtime version to .NET 4.x equivalent
The Azure Storage for Unity SDK requires the .NET 4.x equivalent scripting runtime. This is only available in Unity 2017.1 and above.
From the Unity menu select Edit > Project Settings > Player to open the PlayerSettings panel.
Select .NET 4.x from the Scripting Runtime Version dropdown in the Configuration section. Unity will prompt you to restart the editor.
In Unity 2017, this option is labeled Experimental (.NET 4.6 Equivalent).
Enter your connection string
Log in to the Azure portal.
Navigate to the Azure Storage account that you created for use with this sample.
In the Settings section of the left-side menu, select Access keys.
Copy the entire Connection string.
In the Unity sample project, open the file
Replace the string
YOUR_CONNECTION_STRING_HEREwith your connection string copied from the Azure portal.
Using HTTPS requires Unity 2018.2 or above. Unity 2017 and 2018.1 users must modify the DefaultEndpointsProtocol entry in the connection string to use http instead of https. This means your data will not be encrypted to and from the server.
Try the sample game
Build and run on a supported platform or open the Title Scene in the editor and click the play button.
When the game starts, if any required assets are missing, a "Downloading assets..." dialog should appear. Wait for the game to finish downloading the required assets from your Azure Storage account.
Once the download completes, the dialog should clear. Press the Play button.
In the main game scene, click the left mouse button or tap the screen to "flap." Navigating through the columns earns points. Each time you earn five points, the background music should change to a new song downloaded from Azure storage.
Sample game explanation
The sample game gameplay is based on the Make a Flappy Bird Style Game Unity tutorial series. It has been modified to download music assets from Azure Storage and play new music each time the player reaches a new level by accumulating a specified amount of points.
TitleSceneBehavior is placed on an empty GameObject in the Title Scene. Its
Start function asynchronously initiates the process of checking for the required music files and downloading them from Azure Storage if necessary. The play button is disabled until the required files are first downloaded and then loaded as audio clips.
The static class
BlobStorageUtilities contains functions for downloading files from Azure Blob Storage.
LevelMusicPlayer is placed on an empty GameObject in the Title Scene and persists via
DontDestroyOnLoad. During the Title Scene, it waits for the
TitleSceneBehavior.DownloadingMusicFilesFinished event and then begins loading all of the downloaded files as Unity audio clips. This happens before entering the Game Scene in order to avoid stuttering when each new audio clip is played. Once loading is complete, the
LoadingAudioClipsFinished event is raised, allowing
TitleSceneBehavior to know when it's safe to display the play button.
During the Game Scene,
LevelMusicPlayer handles the
GameControl.StartedNewLevel event with a function that plays an audio clip corresponding to the new level.