What's up guys? Today
we're trying to make a game in one day and publish it to the Google Play
and App Store. And to make it a bit more exciting,
we also will see if we can make some money with the game. Now it's 9:35,
so let's start. But first we need to make a game,
and as we only have one day to finish the game,
we need to make something pretty simple. So we will make an endless runner
where you control a character with the gun,
and there will be obstacles which you need to destroy
in order to pass through. I start by creating a blockout for the character in blender to get
a rough idea of the shape of the model, so I duplicate a simple cube a few times, and change the scale to create the base,
and a gun with some basic details. And now it should look somehow
like a tiny tank And we want to have a pixel, voxel
or Block style for the game. But it’s the first time that we make a game in this style,
so I hope it will look good. At the same time,
I'm working on the character movement, and I started simple
by updating the transform position. But we want to detect obstacles. So if we just set our transform,
we will not directly interact with the obstacles or other objects. So we could use Raycast
which are like laser pointer shooting in every direction, or rigidbody
which enables physics in unity. But we will just use a character
controller. I set up the camera movement,
but for now our character disappears while moving and after fixing that now,
we fail when we hit into something. By the way,
this menu is just a placeholder that I reuse
from some previous prototypes. So now it's time
to create our shooting mechanic. We want to make sure
the game runs smoothly and that's why we use object pooling.
So how does it work? At the start, we spawn a bunch of bullets
and store them inside a pool. They are waiting but not active
and when the player shoots we select a bullet from our pool and make it visible
after the bullet has done its job, like hitting a target,
it's made invisible again and put back into the pool
to be used again later. It's a very simple way
to improve performance. So we passed like one hour a bit more
and now we are ready to destroy the obstacles. But of course nothing happens. So let's create a little script and also
display the health of our obstacle. But at the moment we get no feedback. So to make it a bit more juicy,
we need our obstacle. At the same time, I kept working on the character,
giving it more shape and more detail. So after one hour
I have almost the character done, but the texture is still missing. So first I import the grayscale
palette into blender. This makes it easier
to adjust the colors in unity later. Then I paint some squares,
at random positions of the model to make it
fit more into the style of the game. I add one last detail to the character
and now it looks like this. But when I import it into unity,
I notice that the texture doesn't look good,
because when creating pixel textures your usually make them in a low
resolution. I upload it to lospec
dot com to upscale it, but we are still only seeing black
and white. Let's add some colors to our character. I'm just trying out some different
combinations and I actually like this one. And for the obstacle just take this. So now we have this kind of voxels
and we want to have some sort of explosion or destruction effect. So we could use physics by adding
Rigidbody and collider. We have like 3
to 5 hundreds on each obstacle. And this will definitely not run
smooth on mobile. So for better performance
we use particles instead. As this particle looks pretty juicy, let's
also create a particle for our bullets and to save time we just duplicate
and modify it a little bit. But this looks not juicy enough. So let's add a little wobble effect. 12:00 time to get some food. We have some chicken
prepared from the last day and we'll make some wraps It's pretty fast
to prepare and also tastes amazing. And after a short coffee break,
we're ready to kick in again. Anyway, let's get back to our obstacles. We'll earn some coins
when we destroy them, which we then can use
to upgrade our shooting speed. So we add our placeholder buttons
for our upgrade system and to know how much coins you earn per
round, I add a game over screen with the multiplier coin option,
but more on that in a second. But we want the game
to be somehow endless. So we create an obstacle spawner script
which spawns and spawns obstacles based on the player's position,
where we again use our pooling system. We also have some checkpoints now which you need to pass, and everything
took a bit longer than expected. And now it's like 4 p.m. and I have to say
pressure is getting high. I mean, the game's almost done, but,
I feel like we are at the same position as I've been, like before the lunch break. To even increase the pressure more. Let's make a little tea break. And after getting back, I actually have to
say, the game's almost done. That's it. I mean, the game looks like ssh, But,
So now we need Roxy to save this thing. To make the environment I create some basic trees,
flowers and grass and also textured them. This time I directly add the colors inside of blender,
but after importing everything into unity, I still need to adjust them a little bit
to make everything fit better together and to make everything match better
with the look of our character. I also create the texture
for the ground on the road but we want to make the game
look a bit more colorful. So I select a few different color
combinations for the obstacles. I also create some UI and pixel style, but
we basically only need the few buttons. So now let's bring this all together
and improve our obstacle destruction particles a little bit,
and also change the placeholder UI for our upgrade system
and game over screen and replace our font. We also create a particle
to simulate the destruction of our player when refreshing to an obstacle, and
to make it less sticky, we also created a little animation to our character
and some effects to our guns. For better performance. We will not render any shadows of the rocks and but render
only shadows of one simple cube. And to reduce draw calls,
what also improves performance We have a unified mesh of our obstacle
which will be replaced by the detailed voxel version
once a bullet hits the obstacle, we also have rewarded ads for x4
coins multiplier at the end of each round, interstitial ads
and an option to buy ads free for $0.99. So the game is the game is ready. Yeah. yeah. The as I say, the game is done. We,
we have finished. We can, we could upload it
to the App Store on Google Play. Now it's it’s 11:24 so there is time to upload it. But we would like to balance it
a bit more and add some sounds So as you can see
the game is actually done. But we wanted to finish the game
and also upload it to the stores in one working day. So technically we need to upload the game
now or we are disqualified. But also they have 24 hours
and we make, somehow the rules and we worked like 12 hours or a bit more,
I don't know, on the game. So there's still time left. So the next day we balance the difficulty
and upgrade system a little bit. We also added some sounds
and polished a few things. We created a little animation
to give some feedback. When you pass the checkpoints. Now we can push the game to the stores
so you can download it. But first we need to prepare the App Store
and Google Play. And after adding the screenshots and a short description, it's
time to wait until the game is played. Which brings us to our third step. See if we can make some money
with the game. So we will create an ad campaign and first spend some money
to hopefully get some people to download and play our game. We also take a look at the KPIs or key
performance indicators, which are first the cost per installation or CPI,
which is basically the money spent on ads divided by amount of downloads. Second the playtime and third
the retention, meaning how many percent of the users
are coming back the next days. And this will give us an understanding
of the potential of our game and helps us to predict the LTV
or lifetime value. Meaning how much money will one download
generate on average? And of course, if our LTV,
the money we earn is bigger than the CPI, the money we spend the game is profitable,
meaning the game makes money. And this is actually a really common
approach in mobile game development. You first develop a prototype, then you test it,
and then you check the results and you make decisions
based on the results. If you have good KPIs,
you keep working on the game, iterating, and if you have bad KPIs,
you just kill the game and move on because you really want to have
a good core loop of your game. The loop that players play over and over
again, and only if you have a strong loop, it makes sense to add more features
like more levels, more system skins, cosmetics,
and all this meta features. Of course, there are different approaches. For example, if you have some playtesters
or a community that plays their game. So make sure to subscribe. You can make different decisions. You can make decisions
based on the player's feedback. Let's check the results.
Well, first we need to wait a few days. For those of you only waiting for the numbers,
we made -$125 bye. But let me explain it a little bit. We spent almost $150 on user acquisition. First of all, let's check the revenue. We only have in-app purchases in iOS,
which generates a total income of $5. With the ads,
we earned a total of $8.70, have $5.80 from iOS, and $2.80 from Android. Now, let's quickly
take a look at the KPIs. Now iOS us, we have a CPI of $1.30,
and on Android worldwide we have a CPI of three cent. The main reason why the CPI differs
that much is because the cost per mille like how much you get charged,
how much do you have to spend to get your ad 1000 times seen is higher in tier
one countries like the US as compared to tier three countries, but you earn more
with users from tier one countries. So the cost per mille, the CPM inside of
your game is also higher. Now if we look at the play time, we see
18 minutes in iOS, 14 minutes on Android. For the retention, we see 33 day
one on iOS and 17 on Android. Looking at the LTV on iOS, we have an LTV
of $0.18, and on Android 0.2 cents. That's less than $0.01. And how do we interpret the results now? Well, financially it's a clear fail. Looking at the KPIs,
they're not completely horrible. For good games, you usually want to see
some day one retention of 35 to 40 and to play time of 30 40 minutes
in the first prototype. This means that your call up
is strong enough so you can keep working on the game. Improving the game. Well, of course
it depends a little bit on the CPI. The higher the CPI, the better your game needs to be,
but that's the results surprise us. Well actually not
while it is possible to make a good game a massive hit in a short development time,
I mean, look at Flappy Bird. It's probably the best example. In general, if you make a game
even as a fast prototype, you will invest weeks or even months to iterate on the game,
to test the game and all the stuff which comes before the global launch
and also the game in the video was not really innovative. We actually made a pretty
similar game in early 2020. So you also want to make sure to have
an innovative idea when you make a game. This video or the game was more of an experiment to show you
how mobile game development could work. And I mean, we tested over 80 games
in the last five or almost five years, and none of them were big hits. It would have been more surprising if this game would have been
a huge success. But to remember always, to fail fast
and to fail forward, and to take your lessons and learnings
out of every failed prototype, out of every failed project
and you will always win. Anyway. We already have an idea for our next game
where we will invest a bit more time than just one day,
so make sure to subscribe and also if you want to support
us, download some of our games. The links are in the description. If you liked the video,
make sure to hit the like button. And if not, well,
at least you watch until the end. Ciao.