I have been looking forward to this workshop all week. And so we're going to jump inside of Unity. I'm going to show you the basics of making a super simplistic first-person shooter, super duper juicy and crunchy and fun and exciting. Here's what we've got today. All we have here are these Langoliers. Does anybody Does anybody know what Langoliers are? But we have these little Langoliers here that hurt the player. It's basically infinite. They get faster and faster and faster and faster. [music] So all I did was had a character controller here. I added a little weapon controller to it. It's just simply shooting this terrible gun model here. And if they touch me, I die. And then you get a big game over screen, right? My hypothesis is we can make this extremely fun without actually changing the mechanics. That's all we really need is a simple loop like that and we can make it super duper fun. There are some rules to 10x the fun factor of your game. I've got eight here, although I might throw in some bonuses at the end. The first one is player movement. Just make player movement a little bit funner. We're
going to jump into that really quick. There's world sizing. We'll talk about that. Movement animation, sound, color, enemy reactions, player reactions, coin collection, UI. Stick around because it's going to look incredible. I can't wait for you to see the final result. Okay, so the first thing, player movement. Right now the player movement feels a little bit stiff. Although I did choose this character controller because it's it's the least stiff out of all of the ones I could find. I want the jump height to be more a little bit more exciting. Weirdly enough with Unity, -9.81, which is like standard world gravity. I always move this to about -13. And I did this for Twisted Tower as well. I just don't want it to feel too floaty. So let's hit play and take a look. Automatically that feels better. Man. So you want to fine-tune your player movement before we start fine-tuning the world scale. So what I mean is platforms you can jump on, stairs, walls, even enemy size. All of this stuff should be fine-tuned around the player movement. I'm going to make the jump height a little bit bigger. We're going to do
something like two. And that's cuz I want this to feel much more um like bouncy. Ooh, that feels good. Yes. Just want to be kind of crazy. It's kind of like Quake almost, you know? Now that we fine-tuned the player, we're going to move on to step two. World sizing. We need to know, okay, how big does this platform This is going to be like a game I can't remember what the game is called, but there's a game where like sort of demonic ghosts are flying towards you and you're you're like this hell world and you're on a circular platform and it's infinite. So, this is kind of inspired by that. But, if we wanted to make this like a big platform, maybe a circular platform, how big would we want the various elements? So, for example, this is the player's height uh size right here. Just keep this in mind. This is something you need to write down. It's something you need to put in your brain forever, whether you're making a 2D game or a 3D game. A character controller needs to be twice as tall as a primitive cube. So, now I need to be thinking, okay, well, how big is my jump height? Well, my jump height is actually as big as the player. So, I could say a uh width of five, height of two, and then a depth of five. This might be a
really nice platform, okay? So, let's hold V here and I could snap it there. I don't love five because my grid that's kind of hard to get the grid to look pretty at units of five. So, maybe we could do 4 by 2 by 4. So, this could be our platform. Let's see if if we could jump onto this and see how it feels. You want to make sure that Oh, do you see how freaking good that feels? Look at that. You want the world to be sized to your controller. I guarantee you 50 50% of you watching, minimum, have not thought about this. Everything needs to be fine-tuned for the player. Okay, so this is great. I love this. So, we're going to call this platform and we're going to use this over and over and over again. I think that's good. Let's take a look. Feels good. And these are going to be able to fly through surfaces and I'll make them kind of look like ghosts or, you know, flying demonic heads or something. All right, the next thing we're going to work on, and you're probably thinking, "God, this
these first two things don't matter." These first two things are absolutely critical if you're going to make a fun game. It does not feel fun to jump on platforms that aren't the right size. Okay, let's move on to movement animations. We're going to use this gun model to animate the player movement. I know that sounds weird, but what we're going to do is animate this in such a way that it makes it look like we're moving. If we go to our shoot animation here, it's actually just pivoting right there. See? There are various states that my weapon controller is already keeping track of. If I'm moving, if I'm running, if I'm jumping, if I'm grounded, when I land, and that's all in this weapon controller here. It's listening to that and then it's setting our animator values here. Now that we know that those animator values are being set, I can tell the animator tree, right here, I can tell it what to do. Okay. Hey, that feels pretty good. Next up, we're going to go to our jump animation here and we're going to speed this up at
the beginning. Boom. Looks good. Looks good. You know, animating is an iterative process. You kind of just have to guess and check and tweak and tweak and tweak and tweak and tweak and just wait until it feels good. It's hard for me to know exactly when something feels good, so I just have to hit play mode, go back into animation, go back into play mode, back into animation until it feels just right. Yeah, I think I think what we're going to do is fine-tune that animation once we get a model in there. Do you know what we need? We need sound. Number four, footsteps sounds, jump sounds, landing sounds, shoot sounds. It's all going to be in the animator. This is why a lot of you probably say, "Well, Thomas, don't use animator trees, use physics-based animation or, you know, let the scripts control when sounds emit." I like having control in the animator. This is kind of the way I make games. I like to have control in the animator. And the way that I have control of the animator is I use something called an animator functions script. This animator function script can play all sorts of cool sounds. It
can do a bunch of cool stuff. I had uh Claude put this one together. I usually write my own. I did for Twisted Tower. I had Claude put this one together in 5 seconds today. And all it does is just plays random sounds. That's about it. It's just these functions here. There's also screen shake. We'll talk about that in a second. You know what? Before we move into sounds, I'm going to add my screen shake. It's just a simple screen shake class. I have all these different screen shake presets. So, I can do a small, medium, or large. It's just going to shake the screen a little bit. And I can fire this from the shoot, right? So, if I go to creating an animation event here, go to my animator functions, I have a screen shake here. Screen shake small. Boom. Yeah, that's pretty good. Let's go ahead and jump into artlist.io. I don't recommend you use artlist.io. Artlist.io is very expensive. Big mistake that a lot of game developers make is that because they're making a game that looks really simple, they feel like they need to use simple sounds. No. Why? What? Sound is the time to cheat. So, we're going to use big crunchy rifle sounds. We're not going to use a laser. Pew,
pew, pew. No. I'm going to use a big fat gun sound. That's it. No wonder I've downloaded that sound. That's a good sound. We're going to open up a sound in Audacity and I want to show you guys a trick. This is probably going to be the most valuable trick from this video. You're an indie developer, right? You don't have time to animate ricochet. You don't have time to even determine if ricochet actually happened. You don't have time to make uh gun shells and sparks and hands moving and squeezing the gun. So, what you do is you add that to the sound effects and you trick the player into thinking more is going on. So, watch this. We're going to go to shell gun bounce. There we go. I'm going to open up this sound and what we're going to do is create a bunch of cool layers here to create a few variations of this bullet uh this shooting. I want this to be at -10, okay? I want all my sounds to be at -10. The bouncing I don't like. I don't like
that sound. I if I have to hear that even once every five shots, it's going to annoy me. That's it, baby. I love that. Let's see if these gunshot sounds work for us. So, what I'm going to do here is go to our pivot and if we go to shoot here, you can see that we have a ability to add a play random sounds one. All that does is we can add random sounds to our animator functions here. In this case, it's right here. Did you hear that? That crunch there? I just filled in the gaps. In my brain, I was like, oh, it's the smoke came out of it and there's a strap on the gun. So, I'm just going to find the sounds for all of the player actions, right? Walking, running, jumping, landing, enemy hit [music] sounds, enemy death sounds and just mix them together in Audacity.
Oh man, it's so much fun. The next thing we want to do here is the music. I just really want to throw in some music as the final element of sounds. I think what I want is just some cool synthwave, like maybe some dark synth. No. You know, I've used this one before and I'm totally fine with it. So, let's just use this song, put it into the game really quick here. And by the way, guys, uh this is no small thing. I have found that music can It doesn't manipulate people, but it does something. It tells them something more about the game and it suddenly opens up layers and layers of emotion for your game that you didn't think were there to begin with and then suddenly they're there. Suddenly the game feels serious and suddenly the game
feels like it has a point and a purpose and that it's It has some existential meaning. Okay. Great. It honestly feels so much more serious. It feels epic, you know? One thing we don't have is we actually don't have a hurt sound for the player. Things that are as important as hurting the enemies and killing the enemies. What you want to do is make sure that sound is clear and concise. It's also very important that we're telling the player, "Hey, you're getting hurt, bro." So, we're going to do that with UI and feedback, but we can also just do it really quickly with sound as might as well just do it while we do all the other sounds.
[music]
We need to decide what the color scheme for our game is going to be. So, what I'm going to do is I'm opening up Photoshop right now and we're going to quickly put together a color palette that we're just going to use for our game. And my theory is is that we can have a kind of a spooky-looking game with just flat color. We're going to have our ground color, which is going to be like a ugly brown. We're going to also have the sky. I kind of feel like a greenish color, right? So, something like this. There's our sky color, but it's going to have a horizon in it. I wonder if we could get away with some kind of orange horizon. That's kind of cool. All right, something like that. So, I always I always do like a sky color with its horizon. I do ground color and then I I figure out what the pop of color is going to be. What's the thing that's going to be the interactables or the enemies? The thing that just pops and I think that's what we want to do, something like that. We can also do black. I think black would look really cool in this game. Um maybe in our UI or something, but this is our color scheme. Now, what do we do with this? Nothing. We just have it open in Photoshop. I'm probably going to need to make a skybox,
though. So, let's go ahead and do that. Yay, now we got our skybox. Let's see how it feels in play mode. Looks good. I think we could probably shrink the entirety of it so that it's it looks a little bit thinner. Let's do that for now and see where it's located. We want that horizon to be right there. I've talked about this a million times, but it's very helpful to make things look really good in the abstract. Notice how I'm starting with very basic colors. I'm going to fill in some details. I might go in and do like some cool clouds and mountains in the distance, but for now, I just want it to be perfect in the abstract. Gradients look good, the lighting looks good, the color of the ground looks good, and that's all I'm going to worry about. Let's just grab this for now for our ground. Okay, I don't like it. I don't think I like it, but we're going to keep going. Then we're going to have ground and then we have platform here and this is our platform. Now, one way to make things look a little bit more dynamic and interesting is to adjust your lighting. So, before I do any color changes, I'm
going to make sure my lighting looks good. I want it to kind of feel like the evening. We're going to do sharp shadows with our hard shadows, so they're crisp and they're stylized. I I kind of just feel like the ground should be all the same color and maybe the platforms are are this orange color. I could be wrong. I just have to play around here. Let me play with this uh for a sec here, guys. Yeah, there we go. All right, we're going to use um the orange color for our gun, but we're going to be a little bit more creative with this. I don't want the entire gun to be that vibrant orange. You want it to be in pops.
[music]
Yeah, it does sound like a pistol. So, let's go ahead and find a rifle or like a shotgun, like a punchy shotgun. Honestly, I kind of like Let's do a rifle. That's it.
That's great. Okay, now that's color, right? Uh we also want to do uh lighting. We've done some lighting. We'll do uh some point lights here in a sec. So, let's do a little bit of a point light. So, this should emit for us. I'm going to make sure it's set to zero smoothness. And what I could do is in interesting places, just create these interesting lights to create variations, shadows, and spookiness. And then we can reduce the directional light. Inside of it is going to be a point light. There we go. See how cool that looks now? We're going to reduce the range, crank up the intensity, and move it closer to it. I'm going to take this directional light. I'm going to drop down the intensity significantly. Also, want to make sure I go to my lighting tab and I'm going to turn down my skybox lighting for now. I'm going to crank down the uh intensity of our skybox. I'm going to do that for now. So, it's really moody and dark. And I know what a lot of you are thinking, "What are you doing, Thomas? You're ruining it." Hang on.
[music]
Yeah, this looks much better. Look, when I get into a dark area, it warms up, right? We're going to add uh some lens flare as well to our lights. Might as well while we're finishing up the lights here. Now, you want to be careful with lens lens flares. What I like to do with lens flares is to have full control over them. I actually don't put them inside of the wall lights. I create a separate empty game object and I'm going to make it like a global lens flare we can use for a variety of different things. So, we're going to do the SRP one. So, we could do that and I'm going to make a prefab out of it. If you put a light component on it, you can control its coloring. So, we can do something like this, but I'm going to disable the light itself. Now, if we go to our post-processing stack here, you'll notice that we do have bloom on here. So, there is bloom occurring, which is going to be one of our things we do. That's too much bloom, obviously, but let's see here. There it is. I like it. The next thing we want to do is actually make sure the fog matches
the horizon. This is super easy. We're just going to go to fog here, turn it on, and then we want to make sure that the fog matches the horizon. If I add an enemy in, for example, and I he is, let's say, right here, I really don't want to see much of him. Yep, just like that. Maybe a little bit more. Let's try that. So, now it feels like kind of stormy. Particle effects and trails. One big issue we have is we're not seeing a line for when we shoot things. Fortunately for you guys, I've already got that programmed. So, let's see how we do this. There it is, bullet trail. We're going to use a a a sprite and it's just going to be a very subtle red. Uh and it's going to be a particle? Yeah.
[music]
Feels good. We have trails coming out of the gun. Why don't I go ahead and just add that to the enemy as well? Let's go ahead and open up our enemy prefab here and we're going to add that trail effect. Okay, this stuff is huge. So, if we move the trail around, you can see. We want it to be about the exact same size as that, but I don't want it to have that weird tail. I want it to have kind of a straight tail. Yep. That's what we want. I want to make sure this graphic, just the enemy graphic itself, looks cool. I'm going to make these smaller. This is tough. So, what I want to do for this game, for something that's more arcadey, is I want to flash the enemy like this. We also need like an impact sound. So, yeah, you might you might hear a hurt sound, but I want to hear like a fleshy hit sound as well.
There we go. Do you guys see why this is so valuable? You can see the hurt occur. All right, we could probably get away with some uh particles as well. What I'm going to do, I'm just going to add a particle system really quick. We want it to be a mesh, and we're going to do a sphere, and we're going to do the enemy as the material. I want it to look like juice, or like pieces of of it coming out.
[music]
Particles are your friend. There it is. Now, the death particles, we're going to need to have them have a light. And And that's so that it feels like there's actually an explosion occurring.
[music]
That looks great. Let's add one more particle effect, and that's just going to be a smoking particle effect. We just need smoke. It makes things feel hot and steamy, and we can even add a little bit of particle effects to these the scene itself.
[music]
Yeah, that's good. We're ready to move on to the reticle stuff. We have this knob here. I'm going to set it to white and actually let's be let's be smart here and and come up with a universal color for our UI. So I love that sort of I love using off whites. I don't know why. And we're going to say to Claude, we're going to say "Make sure the crosshair turns a red color if it's pointing at an enemy." All right, so it's going to write that for us. Let's go ahead and clean up the UI for the
health, enemies killed, and score. We're going to make sure our timer and our health are all pretty. We're going to use that same off white for everything. We're going to make sure it's wide enough to show our health and our timer and enemies killed. We're going to do all caps for the for the um fonts. So this is just a quick way to make it look really good. So I can do all caps, right? And then I can go a little bit bigger with our font size, like this. So this is just a quick sort of UI uh trick. I'm going to set it to 55 and then you can space out the characters to make it kind of feel cool. Man, let's let's do it really quick. Sorry guys, I want to do uh some icons here because it just looks so bad when it says all those words. Okay, that looks good. Let's go ahead and go into that new script change for the weapon controller and you're going to see here in the weapon controller now we have a color picker and that's going to be a red crosshair color. So I'm going to do like a pinkish red cuz that's kind of what the color is here. The normal crosshair color is going to be this. Let's go ahead and create a crosshair really quick. And we're also
going to need a image effect that or a like a arrows that occur when we actually make impact with something. So I'm going to go ahead and download a crosshair from Noun Project that I really like. It's amazing how important a crosshair is. It makes things feel so good.
[music]
All right. So, there's our hit radical, and then we're going to put that over here, and then this is going to be our crosshair. And we're ready to jump into Unity, get those sprites set up, bring it in. Boop. Set the native size. Set it to 1 by 1 by 1. There it is. We fade out the center like that. Save it. So, what we're going to do is create an animation here. We're going to call this hit radical idle. And then we're also going to create a new animation called hit radical flash. And all this one's going to do is go red and scale up. And this is just going to indicate to us, "Hey, we just hit an enemy." Here we go. It needs to occur during death as well. So, that's going to be occurring here. Okay. The radical flash is going to occur all the time. The next thing we
want to do is let's go ahead and add some bonus goodies here. Bonus for the skybox. We're going to just add some blocks here. Watch this, guys. You're going to love this. We're going to do some clouds in the distance. Here we go. Looks good. Okay. Awesome. We can do another layer if we want. I'm going to set the fade fade this out here like this. And now we have a cool sort of blurry layer of clouds. Let's go to play maximized and take a look at the final product. You guys ready?
[groaning]
[laughter]
There you go. That's the final result. That's the idea, guys. It's pretty cool what you can do with juice. So, hey, there you go. What do we think?
Auto-generated captions from YouTube — names and numbers may be misheard.
Thomas Brush · 2026
Naavik · 2025
Comments