Cloud technology has been a game changer for the wider tech industry in the past decade. It has been well-adopted by bigger players in the games industry, but less so for smaller teams. The speaker Yoyu made a bold career transition from a cloud technology consultant to an indie game developer three years ago. She has seen so many ways even small game dev teams can utilize cloud technology for productivity or for game experience enhancement.
In this talk, she will use real-world examples of how her team utilizes cloud technology and give practical advice on how to adopt cloud-native development, in particular for smaller teams.
7. BENEFITS FOR SMALL TEAMS
It doesn’t cost much for small projects
It is reliable and needs (almost) zero maintenance
It supports a high degree of automation
9. VERSION CONTROL - PLASTIC SCM CLOUD
LEVEL-1 RECIPES
BUILD AUTOMATION - UNITY CLOUD BUILD
10. GAME DESIGN SPECIFICATIONS IN GOOGLE SHEETS
LEVEL-1 RECIPE
Creating Game Mechanics in Reigns
Francois Alliot - GDC 2017
https://youtu.be/tDdtbh-oUTU
REIGNS
11. READING DATA FROM GOOGLE SHEETS DIRECTLY IN UNITY
LEVEL-1 RECIPE
Authentication
Google Sheets API
Google Sheets .Net SDK
Sheet data (Whispers in the West)
12. How to use Google Sheets API (v4) in Unity?
Playground in the Clouds
https://youtu.be/qm-Ooj6XjvE
33. YOYU LI - INFINITE WHYS
THANK YOU
@YOYU777UK YOYU LI
YOYU@INFINITE-
Y.COM
Editor's Notes
Hi everyone
I run…
Fully remote, based in London, UK
Today, I’m going to share our learnings on the use of cloud-native technology as a small team in the past years.
30 s
I’m an adventurer in my career too.
Started.
Grew the business into over 100 employees, and eventually sold the business.
So I made my first career transition around that time, I joined a tech startup as a co-founder, that’s where I learned about cloud technology.
With that experience, I worked as a technology consultant with many multinational companies.
But I missed a lot about being creative, so In 2020, I decided to quit my job at consulting, and take the plunge into indie games.
That’s the worst decision I ever made.
I started thinking about the use of cloud technology in game development even before I started taking this journey.
But I must say I’m still very new to video game development. In 2020, just before quitting my day job. I actually wrote an article about the state of cloud technology in game development.
Time 2’00 - 3’00
So today I’m going to share what I learned in my past a few years practices and from talking to other small teams.
This is going to be… technical talk… I try to make it interesting…
Level up format
Simplest level - which I think most of you are already familiar with
And then we level up from there
What is cloud-native?
In a short form, being cloud-native means transitioning from servers to services.
What does this mean?
An example will be, some of you may still remember the old days, to share files across, we need to have our own FTP servers, or have to carry a USB stick around on daily basis.
But today, if we need to send files across, most of us will instinctively think about using services like Dropbox or Google Drive.
So, this is how services have improved our lives.
Services can come in different shapes and forms
…
We are going to talk about how we can use some of them in game development in a bit
But before that, what are the benefits for small teams?
What’s in there for you? I’m not going to bore you with a sales pitch
First, services are usually more reliable than servers. Even if you go on a beach holiday…
You don’t need to spend of a lot of engineering hours on maintaining the services.
Second,
For example, in one of the automated pipelines for our game,
🌟check our game scripts, give writers feedback, convert the scripts, hook it with a tts service, and we can notify in a Discord channel once these are executed.
Last but not the least, it doesn’t cost much
Because most of the services are charged on a pay-for-usage basis.
Time 5’00 - 6’00
Without further ado, let’s move on to level 1.
In this level, we are using services as it is, so the software-as-a-service
This is the level where I think most people are already at
Our first recipe consists of tools that many of you are familiar with.
If you come from the world of Unity, I’ll be quite surprised that if you are not already using Plastic Cloud.
As many of you already know, Plastic is the version control tool that replaced Unity Collab.
Plastic:
Benefit - branching, collaborate, even for a solo dev, if you want to maintain multiple versions, like a release version, a dev version, you can do it with plastic SCM.
What it does -
Cloud Build:
Benefit -
You can build for different devices at once on the cloud.
Easy-to-use service, allow you automate the build process from plastic or other version control tools.
What it does -
Version control and build automation are things you absolutely should have been doing, if you haven’t. Even if you are a solo dev, these tools will improve your productivity.
🌟And in relation to design, there is another technique many people are already using.
Benefit: With Google Sheets, you can have your texts and the stats of your game in an external sheet, instead of configuring within the game engine.
Why do you want to do that?
First, it offers better user experience. And it’s less messy to work with, because you separate the game design and the game logic.
Second, it’s easier to collaborate. No matter who you work with, no matter they are technical or not.
Google Sheets, as you know, is a web-based service. instantaneously
And the game I worked on, Reigns, has notoriously used this method,
For people who don’t know
Reigns is a tinder-like narrative game…. swipe
The next card you see, depends on a bunch of conditions.
And all these conditions and texts are defined in a big sheet.
In order to not involve Devolver PR, I’m not going to go into the details.
GDC talk
——
Google Sheets is also a cloud-native service.
And there is another
Google Drive and Google Docs are cloud-based services.
Of course, many game devs are already using Google Docs for documentations, and Google Sheets for game design.
The mobile game Reigns - notoriously uses Google Sheets to compose all the dialogues nodes and the game logic behind it - Francois’s GDC talk.
Here is a more concrete example from Whispers in the West, which I can share.
…
The benefit: whenever the writer makes a change, game also gets updated.
The catch: You should not use this architecture in the build of the game, you should only use it as part of the dev process. This is because Google Sheets is not intended to work as a game backend - it has a very low API limit -
Challenge:
For most cloud-based services, the challenge is not to use the API itself, but to get the client authenticated - basically you need to let the Google Sheet service know who you are.
Service account based authentication.
I recommend authenticate as a service account if possible. Because it minimises the access, and protect your own private data, whatever you might have in your Google Drive.
Time 10’00
For this I once recorded a tutorial in the Playground in the Clouds YouTube channel.
Create the account in Google Cloud console
Share the sheet with this service account, as if sharing with a user
Load the private key as a text asset
Initialise the service
can you give me a show of hands, how many of you are already at level 1?
This is the level where I think most people are already at
Time 11’00 - 12’00
So far, we have already mentioned “automation” several times, and it is a recurring topic in cloud-native development. This is because…
In an ideal world, you should never do repetitive tasks manually. Whenever you find yourself doing something repetitively, you should consider to automate it.
Because automating task, not only saves you time, it also reduces mistakes.
In a small team, it’s not always easy to set up and, especially maintain a fully-automated pipeline. We always have to balance between how much we want to automate, and how much flexibility we want to have.
This is where I think micro automations can come in handy.
We don’t aim to have a big pipeline that automates everything, but we use automation for certain specific tasks.
GitHub Actions is a great tool for that. I should mention that.
Unlike in Unity,
In GitHub Actions, we can use high-level scripting languages like javascript and python, making it easier and quicker to programme the workflow.
Also, you can integrate GitHub Actions with a range of other services, for example, Google Sheets, Discord - which we may or may not have it integrated with Unity.
An example of GitHub Actions we set up for our game is, for whispers in the west, we have the game scripts stored in a GitHub repository, whenever we make changes to this repo, a GitHub action is triggered.
This action checks the format of the scripts, it also connects a metadata google sheet, to check if a character is defined, or if the name of an item is spelled correctly. And finally, it exports the processed data as csvs or json.
Lastly, a very important thing in automation I think is to always remember the human factor. It doesn’t matter how beautiful your automation pipeline is, what matters is how users can benefit from it.
There are some simple things you can do, for example, giving clear feedback.
…
Even something as simple as this is immensely helpful for the users.
Reigns quest…
——
Last but not the least, being on the cloud means this service is available to everyone. GitHub Actions specifically has a good web-based interface - So writers can see the pre-processing feedback without the need to install any software on their computer.
This human aspect is very important for us.
GitHub Actions is just one example of a cloud-based task runner. There are many different similar services, depending on the workflow you use. They are all based on a technology called Docker or containerisation - so if you know how to use one of them, you know all of them.
Time 15’00 - 16’00
It’s a great tool for micro automation.
So far, we have been mostly talk about consuming services as they are.
From this level, we gradually move to the public cloud providers, like AWS, Google Cloud and Azure.
For object storage, most Most commonly used services are AWS S3 and Google Cloud Storage.
They are like Dropbox or Google Drive, but more programmable, cheaper and suitable for production use.
Comparing to previous services, because we are using public cloud, there will be more of a learning curve - it’s like previously we have been consuming fast food, now we will have to gather the ingredients and cook them ourselves.
There will be a little bit of learning curve, but I think they are still really easy to get started, especially with object storage.
The most popular object storage service - they work in a similar fashion.
—-
But object storage is probably the easiest place to get started in the public cloud. There are many use cases for object storage -
Depending on your goal, you may use this as part of the development process, or you can use in production.
For example, you may want your players to get the latest updates without the need to update the game. Or you may want to be able to push some changes without having to rebuild the game every time.
So you can store dynamic game content in cloud storage, and use the object storage API to download these files when the game runs.
In a way similar to the google sheets api we mentioned before, except cloud storage is suitable for production use.
—-
If in the development process, you can use object storage API to download these files during your build process, and write the data as scriptable objects
Or it can be hosted as dynamic content - players download these files when they play the game.
In Whispers in the West, we took this recipe one step further. Because we want to offer game content as DLCs, but we also want this content to be dynamic - so players don’t always need to update the DLCs, they can always get up-to-date content. So we use the out-of-the-box encryption and decryption feature of Google Cloud Storage.
Time 20’00 - 21’00
So in level 3, we talked about cloud storage.
They are an easy place to start .
Finally, we come to level 4. At this level, we will make use of more cloud services.
One obvious recipe is making use of cloud-native databases.
By talking with fellow game devs, I have a feeling that many developers are still hesitant about introducing any networked components, even for something as simple as a high score table - they perceive databases as something cannot be dependant upon.
I think part of the reason is, when developers starts learning about databases, a lot of tutorials are still using MySQL. But in fact, many cloud-native databases are much more hands-free, and they are just as easy to use and as reliable as Google Sheets API or Object storages.
So, if you are building something new today, my advice is to start from something like DynamoDB from Amazon or Firebase from Google.
—-
I’ve heard many developers say - even if we want something as simple as a high score table, it will be complicated, because we will need to have a server for it.
The truth is, if you start building something new today, when it comes to databases, you should always start from serverless databases.
Availability and reliability -
serverless means you don’t need to take care of your own server - you can assume this service is always available - even if you go on a holiday for two months. So there’s very little maintenance required.
Google’s Firebase is another great choice. For people who are new to Firebase - Firebase is more than a database.
You can use firebase to host websites, or you can make use of the Cloud Functions.
During the Christmas period, one of our developers used Firebase to build something really fun.
It’s only a proof of concept, he wanted to explore a Twitch extension that allows two way communication between the streamer and the viewers.
So the streamer pulls the Christmas cracker in a game made with Unity, and viewer uses Twitch overlay extension to pull the other end of the cracker.
We achieved this entirely within Firebase.
Cloud Functions.
Belongs to a category of cloud-native services called functions as a service.
Essentially, it allows you to just write the logic of the functions, and everything else is taken care of by this service.
For example, in this proof of concept, when the streamer pulls the Christmas cracker, they fire a web request to the cloud functions, and the cloud functions change the status of the cracker in the realtime database. And similarly, the viewer can also see a web request to the cloud functions, and when both the streamer and the viewer pull the cracker together, the cracker splits.
It’s a very simple proof of concept. The reason I put it here is also to show how easy it is to get a hang of the technology. The engineer in our team who built this proof of concept previously had no experience in Firebase or any cloud services like this. He comes from a Unity background, but just picked it up and built something in about a week’s time.
And finally, there are more services that may change or even challenge our way of work.
For example, machine translation is getting better and better, can you incorporate that in your dev process?
And AI text-to-speech is also getting more and more realistic, and there are many services for that.
Not to mention the much-talked-about OpenAI - no matter it is ChatGPT or AI generated Art, I’m sure we will see more use of these being used in game development in the future.
Time 25’00
With that, we have wrapped up level 4.
At this level, we talked about more cloud-native services, such…
Finally. Thank you for bearing with me for the past 30 minutes or so.
And I appreciate not all of what I talked about will be immediately relevant to every game dev. I hope everyone can find something useful for them.
And I’ve summarised two takeaways. So if you will forget about everything that has been said here. At least, there are two things you can remember.
First, we mentioned automation times and times again.
Automation is a great way to save time and reduce mistakes. And there are so many services nowadays can help you automate things
So always ask yourself, can I automate this, if you find yourself doing something receptively.
And second. If next time you think about a networked feature and you want to build it for your game. Remember, the chance is, you don’t need servers.
Embrace cloud-native services, and enjoy your beach holidays.