3 Basic Skills for Game Juice in Unity
When you're developing a game, and you've gotten the bare skeleton of your core loop working, you can get to a point where your game feels a little... mute and lifeless.
At that point, it's time to start working on your game's feel – also known as game juice. It's time to start making your game juicy.
The problem is, how do you make something juicy? How do you make your game come to life? How do you take something from this:
By the end of this post, you will understand the mental framework for identifying what to juice in your game. And you'll also learn the 3 essential skills you need to immediately juice anything in your Unity project.
Let's get started.
The mental model: feedback loops
To kick off our discussion, let's discuss the concept of a player feedback loop:
A loop is a conceptual diagram of how a player interacts with your game. A player begins with an initial understanding (model) of your game, and through performing actions within your game and triggering your game's processing of its rules, the player learns how the game works through feedback.
Thus, when we juice a game, we are really juicing the feedback of each of your game's mechanics. It's a form of audiovisual illustration (and sometimes haptic, like rumbles on your iPhone) that shows how your game works, instead of explicitly telling the player through text.
That might sound like a lot of theoretical nonsense, so let's look at an example.
In my current game project Pocket Pong AR – an adaptation of the classic game of Pong to augmented reality – the ball has several associated verbs:
- The ball spawns at the beginning of every point.
- The ball serves at a random velocity in the player's direction.
- The ball bounces off paddles.
- The ball also bounces off walls.
- The ball explodes upon hitting a goal collider.
Without any juice whatsoever, bouncing is bland, and doesn't communicate anything beside the fact that the ball bounces:
By illustrating the game mechanic with a few layers of juice – a satisfying *pop* sound, the ball squashing and stretching upon impact, the subtle sparks that fly as the ball bounces – we give the player a sense of power. This paddle has a ton of power! It can bounce stuff back with a bang!
Basically, show – don't tell.
Game juice is the art of showing, and as the example demonstrates, the first trick of game dev showmanship is sound.
Technique #1: Sounds
It may be obvious, but sounds give you the biggest bang for your buck.
You can have the showiest visual feedback that any game has ever seen, but take away all the sound effects, and your game misses an entire dimension of juice.
Take the same example from before, where the pong ball lacks any sound whatsoever:
And with sound, where I added a solid "*pop*" sound to paddle bounces:
Hear the difference?
To add sounds to your own game, the easiest way to get started is to use sound packs:
- Imagine the sound that you'd like to play for an action in your game.
- Search for that sound on freesound.org, or any sound effect library that you have available.
- Play that sound on a Unity
AudioSourcewhen the corresponding action occurs.
Alternatively, you could design your own sounds by recording various objects (known as Foley), or try your hand at sound synthesizers. However, using a sound effect library gives immediate results that don't take as much time.
Technique #2: Easing Curve Animations
In my game, Pocket Pong AR, I used the classic animation principle of "squash and stretch" to emphasize the ball's impact upon bounces:
The general principle here is this: you can freely animate the position, rotation, and scale of your game's objects as a form of emphasis.
And to create these animations, your building blocks are easing functions – a family of math functions that spit out a number between 0 and 1.
But how would you use these building blocks to make something, you know, squash and stretch? You'd animate the scale!
- Choose a beginning scale vector (the ball moving in air)
- Choose an end scale vector (the ball becoming fully flattened by impact with a wall or paddle)
- Animate between the 2 using an appropriate easing function (in this case, ease out elastic).
As you can see, employing easing curves gives the actors and objects in your game more personality, and are a valuable juicing tool in any game developer's arsenal.
Technique #3: Particle Systems
Finally, while easing curves are great for animation, sometimes you just need a little more visual flair – especially for things in your game that are "fuzzy", such as sparks or explosions.
For these situations, the best tool for the job is Unity's built-in Particle System.
Going back to the example in Pocket Pong AR, I added 2 particle systems (an expanding ring and some spark effects) to ball bounces:
By choosing an appropriate particle texture, and playing with the knobs and whistles exposed by Unity's particle system, particles provide a nice accent as a final layer of juice.
So to summarize,
- Game juice is another way of saying "show, don't tell".
- If you are just starting out, you can add game juice to your game with 3 simple techniques: sounds, easing curves, and particle systems.
- Layering game juice techniques multiplies your game's juiciness, more so than using individual techniques in isolation.
Game juice fosters intrinsic motivation. It's not fun to stare at your game in its bare mechanical form. But adding a little bit of game juice can go a long way in maintaining excitement about your game project.