Making a Unity game!

RCW is an endless minigame about matching colors and text together. I tried to focus on a super clean UI and simple controls. It's also playable from your browser!

In the middle of a game round, with the timer running down and the player already having lost one life.

Play now on itch.io!

Random Color Words (RCW) is a simple endless minigame about selecting the correct pair of colors and words. They’re also randomly generated. Crazy name, I know.

Prior to this, I had very limited experience with Unity and game development in general. I used this experience as a learning opportunity and tried to involve myself with every part of the development cycle. Coming from a design background, I focused particularly on clean UI and making sure that everything felt cohesive and polished. While I wasn’t looking to make anything ground-breaking, I wanted the end result to be fully fleshed out and fun.

I think I achieved that goal. I’m very happy to call this my first full game. Details below about how it all came together.

Gameplay

The gameplay loop is simple… and not original. The core idea is taken from OLDTV (which you should go play right now, it’s free). Both of our games are heavily inspired by the Stroop test, a psychological phenomenon where reaction time becomes delayed when the stimuli is incongruent.

In normal human words, stuff that catches you off guard slows you down. Take these two words, for example.

There are two words and both spell out 'purple.' The one on the left is colored purple, and the one on the right is colored red.

One word is colored purple, and the other red. It turns out that it’s easier for us to name the color of the left word than the right word, because the word matches the color. When the word reads “purple” but is actually colored red, this throws us off and delays our answer.

How interesting. Why don’t we add a timer, and force the player to decide whether the word matches its color in time. If you don’t react fast enough, you lose. And the faster you react, the more points you get.

I keep it simple by only using five colors: Red, Yellow, Green, Blue, Purple.

Buttons buttons buttons

RCW is an endless, fast-paced minigame about getting the highest score. I was therefore inspired by arcade games and in particular, became obsessed with the art of Rhythm Heaven Fever, a 2012 Wii game. I wanted to channel its chaotic vibes, juicy-looking buttons, and generous use of thick borders. I mean, the buttons had to look delicious.

I also liked the button hover effect in The Battle Cats, which flashed bright yellow and magenta. Here, I tried to recreate it in Figma.

I use both the button design and hover effect in RCW. The nice thing about this art style was that it could be consistently applied everywhere, not just buttons.

Originally I was going for a factory setting, with words coming down a sort of assembly line. But honestly, this was out of my Unity skill scope, so I scratched that idea. You can still see it in the metallic plates and muted gray backgrounds.

The part where Figma does everything

One thing that may surprise you is that all the art assets were made in Figma. This includes the start screen, in-game, and game over screen, as well as all the UI.

The in-game screen, pause menu, and game over screen were all made in a single Figma file.

In order to animate different parts of the UI, I exported assets as individual pieces that I could put back together in Unity. This allowed me to, for instance, only animate the border around a button but not change its inside color.

I kept most things grayscale so that I could reuse the asset. In Unity, I simply colored each instance differently.

Each UI component is split into different parts and don't have color so I can set them in Unity and animate fading between colors.

It was really nice being able to see the final product within Figma, without needing to tweak anything in Unity. It made adding small changes much faster.

Animating the UI

The checkerboard on the start screen randomly zooms and changes colors every five seconds. This was done by constantly manipulating the uvRect of the checkerboard RawImage.

[SerializeField] private RawImage cb;

// this would all go in Update()
var length = Mathf.Lerp(2, 10, Mathf.PingPong(Time.time * 0.05f, 1));
var speed = Random.Range(0.1f, 0.8f);

cb.uvRect = new Rect(
    cb.uvRect.position + new Vector2(speed * _x, speed * _y) * Time.deltaTime,
    new Vector2(length, length)
);

The other thing I’m really happy about are the button animations. When the instructions or credits button are activated, the same button is used to go back to the start screen.

The “Go back” text slides out, and the outside border becomes a panel for the text to exist in. I spent too much some time getting it to feel just right. I would like to thank this easings cheat sheet for providing copy-and-paste animation curves.

Conclusion

This project definitely helped expand my Unity and C# knowledge. I learned to use coroutines and C# events to broadcast gameplay happenings. I became more familiar with Unity’s UI and animation system.

How would I update this game in the future? The current gameplay loop is a blatant rip of OLDTV. I’ve floated some ideas around, including:

Code and assets are available on GitHub. Thanks for reading.