Tips on how to deploy recreation updates with Unity Cloud Content material Supply and Codemagic

This submit is written by Mina Pêcheux

TL;DR: The Unity Cloud Content material Supply device is an answer that helps ship information to customers in a synchronized means, which hastens patching and allows reside recreation updates. And by integrating CCD with Codemagic you possibly can replace your cloud content material throughout all platforms and cloud environments directly, everytime you replace your recreation and with out error susceptible and tedious guide work. Guaranteeing that each one your customers at all times get the newest expertise as supposed.

Do you know you possibly can arrange a web based bucket of knowledge to make your Unity recreation updates a stroll within the park?

Whereas newbie tasks are normally fairly small, they rapidly begin to develop in dimension as they method the manufacturing stage since high-quality property are inclined to weigh so much. Does that imply that every time you intend on updating your recreation to patch bugs or add some new content material, you’ll must power your prospects to redownload your entire recreation from the shops, losing gigabytes of site visitors?

Thankfully, it doesn’t. There are a number of methods to keep away from this drawback. On this submit, we’ll be taking a look at one such answer — the Unity Cloud Content material Supply (CCD) device. The aim of this service is to make use of the facility of the web to simply ship information to everybody in a synchronized means and nonetheless make it simple to correctly re-assemble the outsourced property with the code and 3D scenes as soon as inside the sport.

If you happen to’re already acquainted with CCD and have a mission prepared, you possibly can skip to the automation half! 🙂

Anyhow, on this submit, I need to:

  • Give a fast overview of what Unity CCD is
  • Use a super-simple pattern mission as a reference to point out configure a brand new Unity CCD setup from scratch
  • Enhance on this configuration and exhibit use Codemagic to automate the synchronization of property with the sport builds

What’s the Cloud Content material Supply (CCD) device?

Unity Cloud Content material Supply is a cloud service that lets us simply retailer assets on-line after which ship them to all of the customers of our app internationally with out forcing them to redownload something. Merely put, it’s an easy-to-use, totally built-in Unity device that helps separate the code from the property in order that any bug repair or reside information replace is a breeze to handle.

We are able to clearly construct our personal setup with customized instruments, however CCD is basically fast to configure and easy to make use of, and it gives 50 GB of bandwidth monthly at no cost if you first begin. After that, you’ll pay as you go, which makes it attainable to scale your app at your personal tempo and check out the device with none monetary commitments to see if it suits your workflow.

CCD largely depends on a system of environments, buckets, entries, and releases.

The environments are just like namespaces: They help you publish content material for a given viewers or manufacturing stage and to have a number of variations in parallel.

The buckets are the core parts of the CCD system — they’re the storage models you’ll put your information (referred to as “entries”) in. Often, you create completely different buckets for every construct goal primarily based in your mission wants; and naturally, you possibly can set these up with Unity’s new Addressables device to streamline content material to your recreation and get completely self-contained property.

The entries themselves are particular person information: They are often photos, textual content information, XML information, asset bundles… the device accepts a really extensive variety of file varieties! That is the power of CCD: You possibly can extract no matter chunk of your recreation information you need to make it extra versatile for additional updates. 🙂

Lastly, the releases permit us to take a snapshot of the present state of the bucket and mark all of the not too long ago added, up to date, or eliminated entries as prepared for supply.

Notice: If you wish to have full management over which launch is at the moment in use, then you possibly can reap the benefits of the badges, too — have a look on the official docs for extra particulars!

Organising the Unity CCD mission

For this text, I’ll work with a pattern Unity Android app I ready: The “Form Browser”. The mission in itself is fairly fundamental — it merely helps you to decide one of many three obtainable primitive shapes, change its colours, and optionally set a texture. (Try the underside of the article for the hyperlink to the GitHub repo!)

This pattern mission doesn’t have a variety of assets, so it will most likely be a bit overkill to make use of CCD in an actual manufacturing… however will probably be helpful to introduce the fundamentals of the service. I will probably be utilizing a CCD bucket to retailer all of my photos, i.e., all the information within the Belongings/Pictures folder:

However earlier than we’re capable of ship any information by way of CCD, we truly must put together a mission on the CCD platform and put together a bucket to retailer our assets in. We’ll additionally take this chance to put in writing down some helpful IDs or keys that we’ll use within the following part to name the service by way of the terminal.

First, head over to the Unity Dashboard, and log into your Unity ID account (or create one if you happen to don’t but have one). You’ll be offered with a common dashboard that exhibits you the assorted Unity Gaming Providers and allows you to create a brand new mission.

If you click on the “Create mission” button, you’ll be proven a pop-up to arrange the essential information about your mission — in my case, I simply have to fill within the identify:

After you’ve created the mission, you’ll have entry to its detailed dashboard. That is the place you possibly can add the assorted modules for analyzing, testing, and total monitoring of your recreation — to see all that’s obtainable, simply go to the “Discover Providers” menu on the left:

Specifically, you possibly can scroll down (and optionally filter utilizing the “LiveOps” tag) to discover the CCD device. Simply click on on it to add it to your app mission:

Nevertheless, you’ll discover that by default, CCD shouldn’t be truly energetic: You’ll must begin your free trial first!

Regardless that the primary 50 GB are utterly free, it will require you to present some bank card information simply to correctly arrange your Unity ID account for gaming providers. Merely comply with the directions till you get to the affirmation order web page, the place you possibly can click on the “Full onboarding” button:

From that time on, you possibly can return to your Unity mission dashboard and begin to use the CCD device! Now, it’s time to obtain the command-line device (CLI) to name the CCD APIs by way of a terminal:

You possibly can see that the CLI is obtainable for the assorted OSes. Since we’ll be testing guide CCD synchronization within the subsequent half, you’ll need to obtain the CLI that matches your native laptop’s OS from this web page:

The following step is to get our API key, which you will discover within the “API Key” part within the mission menu. Remember that it’s particular to your account and CCD and might’t be used for every other functions.

Lastly, we’ve got to put together a bucket to retailer our contents in. Simply click on on the “Buckets” menu in your mission menu:

Right here, you possibly can create a brand new bucket — I merely gave it the identify (“Android Content material”) and left all of the default settings:

When the bucket is created, you’ll have to get its ID, which we’ll use within the subsequent part to add our assets by way of shell instructions.

By the way in which, we additionally have to get one other piece of knowledge from the dashboard earlier than we go away: the ID of our default setting. This will probably be a needed parameter for our command-line add, however sadly, Unity’s dashboard UI doesn’t but make it simple to seek out. (They’re apparently engaged on it, although!)

The trick is to go to the bucket we simply created and click on on the hyperlink on the correct that claims, “Add content material to create your first launch” (see the image above). There, you’ll discover numerous methods to add the property, together with the terminal methodology, with some helpful instructions that include the setting ID:

Pausing for only a second

OK, so at this level, we’ve got:

  • Our Git repo with all the codebase and the property on the one facet
  • The CCD bucket able to be stuffed on the opposite facet

It’s essential to know that these two repos must coexist and which you can’t merely “merge” them collectively — they’re used for various issues. Your primary repo comprises all of the information of your mission, and it’s the common snapshot you need of all of your codebase and assets at a given time. The CCD bucket is a selected “mirror” of your property with a bunch of good labels and launch variations certain to it in an effort to simply serve this model of your property to your prospects.

Nevertheless, the property in your CCD buckets nonetheless must reside in your primary repo too. (For starters, you really want them for the construct!)

Utilizing CCD manually

With that mentioned, let’s give CCD a attempt. First, we’ll do a guide launch of our property to get extra acquainted with the system. All I have to do is obtain the CCD CLI device (from the obtain web page we noticed earlier than) on my native laptop and unzip it.

Notice: If you wish to add the ucd executable contained in the archive to your PATH to make it accessible from anyplace, be happy to take action — I’m simply going to maneuver it to my present mission listing to make issues less complicated. 😉

Then, I’ll head over to my mission in a terminal and log in to my CCD service utilizing the API key:

./ucd auth login <api-key>

If all goes nicely, we get a message that claims “Login profitable.” We’re now linked to the CCD, and we are able to begin interacting with the buckets, releases, and so forth.

Specifically, we are able to set our default bucket to be the “Android Content material” one with our bucket ID and the environment ID:

./ucd config set bucket <bucket-id> --environment <environment-id>

When the operation is completed, the device will log the up to date config:

Efficiently switched to bucket <bucket-id>.
  At present energetic mission: <project-id>.
  At present energetic setting: <environment-id>.
  At present energetic bucket: <bucket-id> (Android Content material).

Lastly, we simply have to really synchronize the information we need to retailer and ship by way of CCD for our mission. In our case, these are the pictures contained in the Belongings/Pictures folder. The command to make use of is fairly simple:

./ucd entries sync Belongings/Pictures --environment <environment-id>

As common, the CLI will log the outcome that can assist you confirm that the whole lot went nicely by itemizing the information it added to the bucket:

Added Entry: icon-checker.png.meta
Added Entry: icon-cylinder.png
Added Entry: icon-dots.png.meta
Added Entry: icon-cube.png.meta
Full! Bytes uploaded: 200783

Nevertheless, at this level, if you happen to go to your Unity Dashboard and check out the buckets record, you’ll see that nothing has modified: The bucket appears to nonetheless be ready for some content material&mldr;

That’s as a result of, at this level, we’ve got synced the information however haven’t truly created a launch. So, mainly, our adjustments haven’t been printed.

As soon as once more, the CLI has a pleasant command for this:

./ucd releases create --environment <environment-id>

This time, if you refresh your CCD buckets record within the Unity Dashboard, you’ll discover that your “Android Content material” bucket comprises a brand new launch (auto-numbered “Launch 1”, clearly):

You possibly can click on on it to get extra information and, specifically, verify the assorted information that have been tracked by this launch:

That’s nice! We’ve efficiently synced our property with the CCD bucket, so our CCD device can now monitor, model, and ship the assorted assets in our video games!

The actually cool factor is that at this level, if we alter property and need to “redistribute” them to our prospects with out asking them to redownload stuff, we are able to re-sync the information, and the CCD device will assist us auto-deliver the products correctly. 🙂

Auto-syncing the CCD property in a Codemagic workflow

However wait — what if we alter the code and create a very new construct of the app? We must always guarantee the shoppers get all the brand new updates directly, together with the pictures, proper? Besides we beforehand mentioned that our Git repo and the CCD buckets are codependent however separated&mldr;?

Additionally, provided that CCD has you (typically) use completely different buckets for every platform and that you simply sometimes set it up if you plan on updating your content material usually (for instance, for a reside recreation), working all the instructions we noticed earlier than manually each time for each bucket can get tedious and error susceptible. That’s why a lot of builders favor to use automation instruments which have a predefined set of steps to run and thereby keep away from inconsistencies throughout releases. 😉

For instance, Codemagic may help you make a extra sturdy pipeline by at all times executing the CCD synchronization and Unity mission construct collectively. Moreover, as a result of it briefly lends you a machine to run your workflow, you possibly can truly request a special OS than the one(s) you may have and thus construct for much more platforms! For more information about Codemagic, take a look at this text.

Notice: To make use of Codemagic, you want to model your Unity mission with Git after which publish it on a typical Git supplier, like GitHub, GitLab, or Bitbucket.

Mainly, for my pattern mission, I’ll simply want to make sure that:

  • My Unity mission is correctly configured for constructing Android Unity apps, as defined right here
  • I’ve all of the required API keys and IDs for my Unity CCD mission, its buckets, and its environments
  • My mission repository comprises a script to construct my mission by way of the command line (that is the equal of opening the “Construct settings&mldr;” panel and clicking on the “Construct” button, however it may be referred to as from a terminal)
  • Lastly, my mission repo additionally comprises a configuration file, codemagic.yaml, to specify which steps to run by which order each time I begin a brand new construct course of

Organising the Codemagic app with CCD

If you happen to’re not acquainted with Codemagic and need to see arrange an app step-by-step, have a look on the docs. Additionally, in case you aren’t a Codemagic person but, you possibly can join right here:


The one factor to bear in mind right here is that we’ve got to outline a number of setting variables for the workflow to work correctly. These are important to correctly safe passwords and different delicate information — briefly, you utilize a variable within the (publicly versioned) command strains, and then you definitely give them precise (personal) values in your Codemagic app’s settings.

Right here, we need to create a number of variables and cut up them into three teams: “unity”, “keystore_credentials”, and “ccd”:

The varied values for the “unity” and “keystore_credentials” variables are mentioned right here. As for the “ccd” variables, they’re fairly self-explanatory:

  • CCD_API_KEY: That is the worldwide API key we discovered within the dashboard — it permits us to log in to our Unity CCD service from the terminal to run the synchronization
  • CCD_BUCKET_ID: That is the ID of the bucket you need to synchronize
  • CCD_ENVIRONMENT_ID: That is the ID of the setting you need to use for storage

Making ready our automation information

Now that the app is prepared, it’s time so as to add the automation-related information and take a look at it out!

The construct script merely calls numerous Unity APIs to construct the mission for Android — you possibly can see what this file seems like right here.

The codemagic.yaml file permits us to specify the essential setting configuration we would like on the machine after which run shell instructions to carry out our duties. For instance, on this case, we are able to use the next setup:

    identify: Unity Android Workflow
    max_build_duration: 120
            - unity # <-- (Consists of UNITY_HOME, UNITY_SERIAL, UNITY_USERNAME and UNITY_PASSWORD)
            - keystore_credentials # <-- (Consists of CM_KEYSTORE, CM_KEYSTORE_PASSWORD, CM_KEY_PASSWORD, CM_KEY_ALIAS)
            - ccd # <-- (Consists of CCD_API_KEY, CCD_BUCKET_ID, CCD_ENVIRONMENT_ID)
          UNITY_BIN: ${UNITY_HOME}/Contents/MacOS/Unity
          PACKAGE_NAME: "com.minapecheux.ShapeBrowser"
      - identify: Login+Sync CCD
        script: |
          ucd entries sync ./Belongings/Pictures --apikey ${CCD_API_KEY} --bucket ${CCD_BUCKET_ID} --environment ${CCD_ENVIRONMENT_ID}
          ucd releases create --apikey ${CCD_API_KEY} --bucket ${CCD_BUCKET_ID} --environment ${CCD_ENVIRONMENT_ID}          
      - identify: Activate Unity License
        script: | 
          ${UNITY_BIN} -batchmode -quit -logFile -serial ${UNITY_SERIAL?} -username ${UNITY_USERNAME?} -password ${UNITY_PASSWORD?}
      - identify: Arrange keystore
        script: | 
          echo ${CM_KEYSTORE} | base64 --decode > ${CM_BUILD_DIR}/keystore.keystore
      - identify: Set construct quantity and export Unity
        script: | 
          export NEW_BUILD_NUMBER=$(($(google-play get-latest-build-number --package-name "$PACKAGE_NAME" --tracks=alpha) + 1))
          ${UNITY_BIN} -batchmode -quit -logFile -projectPath . -executeMethod BuildScript.BuildAndroid -nographics        
        - android/*.apk
        - identify: Deactivate Unity License
          script: ${UNITY_BIN} -batchmode -quit -returnlicense -nographics

The primary strains are common information or constraints on the workflow, and the setting block lets us import and/or outline setting variables for our pipeline. You possibly can see that we simply recall the identify of the setting variable teams we ready to straight re-inject all of the variables they include.

Then, the script half is the true meat of the file: On this workflow config, I exploit the preinstalled Unity CCD command-line instruments to entry the bucket I ready and synchronize the property inside. Lastly, I activate my Unity license, put together my Android keystore credentials, construct the sport, and deactivate the license.

You’ll discover that the command that really makes use of the CCD CLI to synchronize the information integrates all of the setting variables we took from the Unity Dashboard and added as setting variables.

Attempting out the pipeline and checking our uploaded assets

Each time this pipeline is run, we’ll re-update our CCD assets to their newest model and construct the related recreation model (which we are able to then obtain from the Codemagic construct web page as a ZIP “artifact”).

As you possibly can see, synchronizing property with the Unity CCD device is definitely very quick. After all, it relies on the quantity and dimension of your assets, however on this case, it takes simply three seconds!

Now that I’ve run my automated workflow, I’ve an up-to-date model of my recreation, and if I’m going again to my Unity CCD mission bucket dashboard, I see that my “Android Content material” bucket has one other launch, “Launch 2”:

Once more, we are able to see extra particulars. Specifically, we are able to take a look at the record of releases and see their badges!


Discovering the correct structure for a Unity recreation and its contents might be laborious, and normally, the extra complicated the mission, the bigger the variety of property it has. However these days, instruments like the Unity CCD assist us higher arrange our tasks and decouple assets from code. Including a little bit varnish of automation on prime with further providers like Codemagic can be a pleasant approach to keep away from any undesirable inconsistencies if you construct a brand new model.

I hope you loved this tutorial — and naturally, don’t hesitate to share your concepts for different DevOps matters you’d like me to make Unity tutorials on!

You possibly can take a look at the pattern mission for your entire “Form Browser” mission on GitHub over right here. 🚀 If you happen to received caught whereas following the steps on this tutorial, you possibly can at all times speak to Codemagic assist on Slack. Additionally, the docs for getting began with Codemagic and Unity might be discovered right here. Or use the contact kind under to schedule a name with us!

Mina Pêcheux is a contract full-stack net & recreation developer. She’s additionally captivated with laptop graphics, music, information science, and different matters! She runs her personal weblog. Alternatively, you will discover her on Twitter.

Related Articles


Please enter your comment!
Please enter your name here

Latest Articles