Zafe, how are you? Zafe, welcome, welcome, welcome. Is that how I say it? Cyber Rift Games, how you doing? All right, guys. We're in live stream number three for workshop day number three. Today's the final day. We're going to wrap up this first person shooter. We started with super duper basic cubes and it was really boring and it felt awful and we haven't really changed any of the gameplay, but we have changed the game feel and now the game is super duper fun. So, we have a few things left to do today. So, let's go ahead and jump into Unity. And by the way, if you're just joining us, or how about I say this, if you want to if you want to make 2D games, there's a 2D game kit below. It's totally free. It's my treat to you. Um, I use this exact game kit to make a game for PewDiePie in 14 days. I redid the game kit completely. Um, so yeah, check it
out below. Okay. Uh, yo yo yo yo yo yo yo yo yo yo yo yo yo yo yo yo. Tuckmack, come on in. Shadow Interactive, always good to see you.
[snorts]
Zechen Hag, great to see you. Come on in, guys. Come on in. Okay, well, one of the things we need to do is we need to jump into um what was it? Let me double check here. I want to make sure I'm following the notes I had so that my editor can do a good job editing this. Um let's see here. Yeah, particle effects and trails. Yeah. [snorts] Okay. particle effects and trails. Okay, that's what we need to work on. So, the first thing I want to do is well, we already if we want to hit play here, we can take a look. We have trails coming out of the gun. Why not go ahead and just add that to the enemy as well? Okay, so let's go
ahead and do that. Um, let's go ahead and add the trail to the enemies. So, if we go to our enemy here, enemy prefab. 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. We have a bullet trail. I'm just going to add that here. Zero out its position. Maybe set its size to like this. Right. Let me show you. So, if we move the trail around, you could 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. So, I'm going to do this. There we go. Like just like that. Um, I'm going to do two of them, but I'm going to call this enemy trail and make a prefab variant out of it. There we go. Actually, just do an original prefab because it's it's not
really related to the bullet at all. I'm going to do two of them and then this one's going to be smaller and maybe last for six seconds so that there's two trails creating sort of a sort of a a flow to it. Um we want it to last for maybe Yeah, let's do 3 seconds and then 4 seconds. And let's just see how that looks. Hey Ancestorial, how are you? Come on in guys. Okay, let's see what this looks here. Yep, that's what we want. We're going to make them smaller. So, let's go to our enemy. Make the enemy itself smaller. Uh, the problem with this is that the graphic right here [snorts] is on the parent. I don't love making parent prefabs weird rotations and weird scales. A good rule of thumb for me is to keep everything nice and clean. 0000 1111.
Okay. 0 0 rotation 111 scale. So I'm going to take this enemy and actually put it inside here and just remove all of the other things like the enemy script and the all I want is a renderer and I'm going to call this the graphic. Okay. Save that out. Make sure I remove the mesh renderer from the parent. Does that make sense, guys? Why I want to have the graphic on the inside. That way I can do what? I can animate it. Right. So, this is mainly for Jordy. Jord's my editor. Jordy, this section here is going to be focused on the enemy. So, just you could you can label this section something like enemy graphics or enemy effects or something. Um, yep. Come on in, guys. Come on in. Welcome, welcome, welcome. I know it's early, but got to knock this out today. Uh, let's go ahead and add the animator. We want to do an animation and then we want this to maybe pulse and move. Okay. Um, also we need a
um let's not do the animation just yet. I want to make sure this graphic just the enemy graphic itself looks cool. So, we're going to go to our materials here. We're going to call this um a new folder. We're going to call this enemy materials. And I kind of want a material that's similar to the weapon wood. Okay, I'm going to call this enemy. I'm going to drag that on here. So, now that's the enemy. And also, let's go ahead and create a little eyeball for our enemy. So, let's go to our forward. So, it's going to be, I believe, right here. And we're going to add an emissive. Okay. Um, [snorts] we already have an emissive for our world, and that's going to be our wall light red. I'm going to take this and move it over here. Duplicate it. Enemy eye. This is our enemy eye emissive, right? Hey, might as well just go ahead and throw a light on there as well, right? Let's do a little bit of a point light. Let's put it
inside of the eyeball. I'm going to call this eye. Here's our point light. I'm going to zero out its position. Zero out its scale. Move it right here. Make sure our light is turned on so we can see it. Let's make the range kind of small. And now, and by the way, uh, what we could do is we could make this a spotlight. And the reason we might want to do a spotlight is so that it's more performant. So, if we point a spotlight at our enemy eye like that, it's much more performant. And I know that sounds weird. I always thought spotlights would be more complicated than a point light, but point lights are actually a bunch of spotlights. Okay, that this really right here is what a spotlight is or a point light is. It's a bunch of spotlights. That's what a point light is. Ridiculous, I know. Um, so you want to be careful using point lights. You also don't want to generate shadows when you don't need to, right? So, make sure this point light is
no shadows on, right? Or or spotlight. So, that's a good spotlight. I'm going to call this the eye light. I'm going to make it a little bit red, right? And I'm going to save that. Should I give three to four years on my first game? Probably not. Um, that's a big gamble. I would make a game like this where it's super simple and small. Make it juicy. Make it fun. Make the the the loop really straightforward. I mean, if I really wanted to, I could probably turn this into an infinite game um that has increasingly more complicated enemies, maybe five enemy types, maybe five weapons. It's an hour long. I sell it for five bucks. It's not taking itself too seriously, and I get it done in three months. That's what I could do with this. And I think I'm probably going to try that for my next game. Um, because I just worked I'm still working on this 5-year project and I'm going to release it and it's in beta right now. It's called Twisted Tower. That's a huge
gamble. Uh, and it's exhausting and it's not I'm not saying don't do it. You can eventually do it, but with a crappy game or with your first game, you want it to be crappy because it's going to be. So, just might as well just get it over with. Here we go. I'm going to make these smaller. They're a little big. I'm going to add a point light honestly to the entire thing because I'm going to call this broad point light because I want them to sort of have this glow around them. So, here I am doing two lights. Um, but it's good to have a glowing light around the eye. I think that's fine. And then I'm going to do this as well. Uh I'm fine with it being more of a orange-ish color. Right, like that. And let's go ahead and double check and bring this into the scene here just to see how that light looks. Okay. So, it's it probably needs
to be a little bit more broad. [snorts] So, I'm going to go ahead and add a broader light to it. Intensify it like this. And then, yeah, let's let's go ahead and make it a little bit more red. Like that. And I can bring it forward. No, let's keep it inside here. And then let's make that spotlight a little bit broader. So you notice that I'm looking at it in the context of the scene and I'm doing that on purpose, right? Because I want Yeah, there we go. Uh I want to to know how this is going to look in game. And sometimes you can't really see that when it's I like them red. Sometimes you can't really see that when you're working in the context of a prefab. I'm going to hit apply all here. The graphic is a little small. Um so I'm going to go a little big. I'm gonna actually take the graphic. This this this, right? I'm going to press control shiftG so that it's in its own little game object. And I'm going to call this graphics. And now I can just shrink it down. I'm going to do 75 for all of our scale. Save it. Take a look.
And I'm actually okay with the collider being bigger because that gives a little bit more more um forgiveness to the player, a little bit more grace. It always feels better when you the player feels like they were kind of close, but they were able to do it, a little small, and that trail's a little big. So, let's let's let's do a couple things here. Uh, we're going to increase the size of the graphics to 8. We're going to make the trail not so big. Okay. And also not so opaque. Um, that is the bullet trail, that material. So, we're going to call this, we're going to go ahead and create an enemy trail. And it's going to be faint, much more faint, right? Do like this. Emissive is not going to be so intense. I'm going to add it to both of our enemy trails. Make sure I hit apply all here. And hopefully that looks good. Let's
take a look. It's still a little thick, isn't it? I'm going to turn off the emission here. No, I I I think that's okay. And we'll just decrease the emission. There we go. Let's see here. Yeah, not so intense, but it's still a little big, isn't it? So, let's go ahead and shrink the size. Okay. All right. Shrink this size, too, so that is much smaller. Good. All right. Uh, let's go ahead and hit play here and take a look. What kind of team do you recommend for an indie game? How many devs? How many artists? It's I can't I don't have a recommendation for that at all. I'm sorry. I really don't. An indie game is such a Some games are really big and it depends on your talent. You really have to figure that out for yourself. Okay. So, you'll notice that
you can't tell that you're shooting something, right?
[snorts]
Um uh but let's let's let's worry about that after after this. Let's get let's get the death particles. Um no no no. Let me think here. I'm thinking for for my editor. Yeah, this is all related to the enemy. So we're going to do uh a flash for the enemy when you hit it. Um this is going to be an interesting thing. So basically I need to apply this prefab here. 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. If I can do it, I want to do it right. The problem is sometimes, weirdly enough, sometimes this doesn't work. And I I have not figured out why. Sometimes the animator can't handle emission uh emissive light animations. I don't know why, and it's probably my fault, but I've had this issue for for years. Um,
we're going to call this enemy idle or no, no, just um, yeah, enemy idle. There we go. But you want to make sure that you go into your enemy. Yep, that's good. We're good. Uh, that's enemy idol. And then also, let's go ahead and add another one here. Enemy flash. Okay, we're go to the animator tree here. And what I can do is go to the parameters, go to trigger, call this flash. And what's going to happen is the enemy is going to flash when the flash trigger occurs. No exit time, no transition uh duration. You want it to go back to idle after the flash occurs with a transition of 0.25. That's fine. But you want to make sure you turn off the loop time for flash. And then maybe even let it transition to itself in case that it's getting hit during the flash animation. You want it to still occur. So I'm going to make sure that occurs as well with the zero exit time. Uh no exit time. And then um transition duration is zero as well. Let's make sure we turn off Yeah, the exit time is turned off. So that's all set and all we got to do is now
animate it. Okay, so let's go ahead and hit record here. And we're going to make sure the graphic emission flashes like this. And just like clockwork, I told you. I freaking told you it doesn't want to do it. It's so weird. Why? There it goes. Freaking told you. That's what we should see. Okay. Now, it looks like it's taking a while to get back down. And that's because we need the emission to not be so intense. So, like this. There we go. So, that should happen when we shoot it. Okay. I have my doubts. I really do because I have seen time and time again the flash not occur. So, we're going to go to black here. And it might be that it can't handle the intensity values.
I'm not sure. And this is idle. Nope. That son of a bee. Hang on. This is This needs to be in flash. There we go. There's flash. And then this is idle. And this is our idle state. Okay. Now, we need to go ahead and go to the code, right? and say basically look when the enemy takes damage set that animator trigger. That's really it. All right. Will I stick to making 3D games from now on? Yeah, I'm probably going to keep making 3D games. 3D games once you get the hang of it, it's actually kind of easier to make 3D games because you can get a lot more um mileage out of your assets. I can get a lot of mileage out of a terrain with some trees and a first-person controller. Beautiful music playing and I could break boxes and break rocks and dig holes. Super simple gameplay, but I can have a player experience that for 30 minutes. Uh, I found that
during the development of Twisted Tower, I always thought we needed to go really big because my bra my brain was still in the 2D space and in the 2D paradigm, you got to make things really big to get a lot of leverage out of your assets and out of a level. Whereas 3D, because you can, you know, obviously move in three dimensions, the player has a lot more room to breathe and explore and just walk around and look at stuff. So, it's way more immersive. that immersion is like a 2x kind of thing where it just multiplies a game's um gameplay length and value honestly. So, I'm probably going to do that. Um let's create a new section called references or no, let's let's do uh yeah, references is fine. And then we're just going to have a reference to um the animator. It's going to be a public
animator. Okay. And then on take damage. All we're going to do is look if we aren't dead then go ahead and play that animator trigger flash. Right. If we're not dying, then play that animation. Otherwise, we're going to spawn particles. Okay, let's see if this looks good. Uh, we're going to need to do other stuff as well. For example, a reticle effect. Um, we're going to need to do that as well, just so there's clear indication that the enemy is getting hurt. 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, which we may need to just tweak the enemy hurt sound for that. Also, the reticle needs to turn red. Okay, that didn't work.
Why is that happening? What's going on? Oh. Ha. The animator is not assigned. And by the way, I was talking about this earlier yesterday. I I want to see these errors. So sometimes I don't check for null references on purpose. Uh so I don't say look if the animator exists then play the animation. I'll let it fail so that I know as the developer why it's failing. Um there it is. All right, you guys ready to take a look? Let's see if this works for us. How many games should I make? I don't I have no idea. Okay. So, what did I tell you? It's not working. We need to debug it. Why is that so annoying?
It's so frustrating. Uh, we need to debug. [snorts] Uh, debug.log log flash animation. Let's see if [snorts] that that does it for us. Um, and it will, which is frustrating because I know I know it's because of that stupid emissive. Um, it's so frustating emission. There it is. I told you. Look at that. Animating emission does not occur. Why is the name like that? It's doing it on. That's so weird. I don't know why that's occurring, but we're not going to worry about it right now. That's crazy. Um, that's wild. Look at this. Emission color during the flash is is changing, but you can't see
it change. We might need to ask Claude what's going on there. Uh, go to flash here. Go to record mode. Look at that. You can't see it. I told you. I freaking told you. Animating emission. Maybe it needs to be set to real time. That's probably what it is. Is that what it always was? But there it is there. Set to real time all of a sudden. But it's set to baked here. What on earth? Let's double check. Super annoying. Look, I set it to real time and then all Oh, it's cuz that's the in the material. Duh. All right, let's hit play. Hello from Florida. That's Mr. Trail. Awesome. 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. So, let's go ahead throw in some particles. What I'm going to do is I'm going to go into my um what are all these enemies here? I'm going to go go into uh the the layer here or the the base level scene here. I'm [snorts] just going to add a particle system really quick. Okay. Uh, we want it to be a mesh particle and we're going to do a sphere, right? Um, and we're going to do the enemy as the material. Okay, just like that. And I'm going to see ju I want it to look like juice or like pieces of it are coming out, right? Uh, we're going to set the shape to a sphere. And we're going to set the gravity
modifier to two. We're going to make it bounce with a collision. We're going to make it world. We're going to do bounce of one is fine. Uh we're going to do lifetime loss. No lifetime loss. We don't need a lifetime loss. And then we're going to set this to two. And then two. And we're going to have it shrink over time. Right? Make it shrink over time. We're going to start big and go small. So, just click that. There we go. And we're going to start at random sizes. And I cannot tell you how many uh new game developers don't fully value randomization of the speed, the launch speed of a particle. Uh I've seen this a lot in new like newbie game developers. um when they are emitting particles from an attack, all of the particles move out really evenly and it's really
really awful. Don't do that. So, let's set this to 0.1. I'm going to set the size to be random. That's good. Maybe 0 2 and then 6. Uh let's set the radius to be much smaller like this. There we go. And let's take a look at how it looks in bursts. So you can see here why why we need to randomize um because of the gravity. Yeah. Is there a gravity modifier over time? What we might want to do, we might want to set it to be a cone. Yeah. Okay. So, we're going to set it to be a cone with a heavy angle. Yeah. Like this. Then we're going to see if we can set the start speed to be five and 15. Yep.
You want it to be spherical, though. Let's think about this. I don't like the sphere thing because let's think here. I'm gonna set it to a sphere really quick. The the speed is too fast. Five and then one, 10, and then three. The problem is the gravity modifier. If we set it to zero, it's going to look even. So, what I might want to do is have a gravity modifier of zero and then maybe a force pushing down. [sighs] of and it changes over time.
We're going to set it to world. Yeah. Is that it? Oh man, let's think about this. Something something's wrong with it. It's really pissing me off about the gravity. I wish the grav I wish we could modify the gravity over time so that it starts and then maybe external force. No, sorry. I'm thinking this through. Okay, it's going up. So, what if I set it to one? Why is it Why? Why? Why is it always going up?
If I set it to neg five, it still goes up. Oh, it's because they bounced. Okay, let's do this. Let's do this. Let's set the uh gravity modifier to be just one and see how that feels. Okay, that might be okay. Uh the size is a little big. Four. We're going to do 04 and then 0.1. Start speed can be one and three. This is going to be the hit one, right? There we go. Lifetime's too long. Okay, really quick. Bouncing is too much. You don't want it to be too aggressive. There we go. That's That's it. So, every time we shoot it, this is what I want to see. But then we're also going to have death particles as well. Okay. All right. So, let's go ahead and push this
into our prefabs folder. I'm going to call this hit particles. And then we're going to also have a hurt particles. I'm sorry, a death particles. The death particles are going to be much bigger, not as many, right? Like this. And we don't want either of these looping, by the way. We just want to inst one hit. And we're gonna uh instantiate the hit particles. I'm okay instantiating them, honestly, because it's just a small game. We don't need to do any particle pooling or anything like that. Okay, Flame, what's what's Flame saying? If you have a dream game in mind, try making smaller games with only a single mechanic from your dream game. I totally agree. The point is to experience hardships, come up with solutions, and utilize those solutions in your later career. 10,00%. Uh guys, your first game
isn't going to be good. And if you can't if you can't accept that, um you should be making games. You need to be okay with releasing bad games quickly and iterating on your failures and what you've learned. Okay, let's go ahead and get these hit particles in and then also our death particles. These are our death particles. Let's hit play here and take a look. So, this I'm going to set it to looping really quick just so I could see how chunky it is. And we're going to go one. There's our death. Maybe do 20. Start size 08 and then point 4. Just a bit bit chunkier here. Yeah. Good. Does that make sense, guys? While we're doing this, we have our hit particles.
It's a little big. Why the f? Hold on. Which one of these is the root? We have hit particles here. Oh, Thomas, we got to set this to death particles, which is I'm going to make it an original prefab. Okay, so there's our death particles and then hit particles. That was getting influenced, so that's a problem. Dang it. Not so fast. There we go. All right. So, there's our hit particles and here's our death particles, right? So, they're just bigger. Um, and what we want to do is we want to have both of those as prefabs, which they are. And all I'm going to tell uh Claude to do is instantiate death particles and hit particles uh in take damage. Death particles should be unparented. Both should both should both should not
have a parent. And and I think Claude is going to know exactly uh Claude is going to know exactly where that this this should go. Obviously, I could write this myself, but we're going to keep moving forward here while that is written. Um, what is next here? Well, I think that the um I think that the we need a script we need a script called destroy object. And this script is going to destroy an object. Wait to destroy. It's going to destroy an object. in a certain amount of seconds, right? Um why isn't that working? Oh, right.
So, it's just going to destroy this game object um after a certain amount of seconds. Why is that look like that? Okay. I don't know why that for some reason that confused me. Um, [laughter] let's move into our hit particles. Why am I doing this? Well, so that we can destroy the particles after let's say 5 seconds, right? Um, the same is true with the I mean honestly just like 3 seconds. The same is true with death particles. And by the way guys, destroying and instantiating and destroying and instantiating really causes a lot of hitching. So we would uh the the better solution here is to do use object pooling um and just have an object pool available to us that we can use them over and over again. But I'm okay with instantiating and destroying right now.
Yeah, every enemy is going to have the same exact particle effect. We're not get we're not going to be clever here. A lot of game developers, there's two things they do. First off, when they're using assets, they'll download a bunch of assets and because they purchase these assets, uh, they feel guilty and they feel like they need to use every single asset in the asset pack. That this is just content overload for indies. Also, you feel like you need to create way more variation than most players even need. Most players don't need a unique blood splatter effect for every single enemy. They don't even need a unique set of blood splatter effects. So, for example, I was tempted to create like five different decals for blood splatter for my enemies in Twisted Tower. I just have one. I don't care. You know, you got to move forward. You cannot keep creating content. You've got to finish the content. So, uh let's see what Claude came up with here. So, there we go. Hit particles are
there. Death particles are there. Yes. Yes. Yes. Like I said, it knew what it needed. Now, there's some there's some something I want to say about AI code really quick. Stuff like that, you might be thinking, Thomas, why didn't you just write that yourself? Right? That's the first question. This is so easy to write, but declaring it here, adding the header, declaring death particles and hit particles and then also instantiating it, writing the instantiation code, I can write a sentence faster than I can do that. And then I can let Claude do it in the back end. Now, the problem is sometimes Claude will do this, right? We want to make sure that our um our syntax is correct. So, that's a great example of why it may actually take longer. Um, I haven't had that issue in Twisted Tower, though. Um, so,
but anyway, that's that's one thing. Another thing is it's it's not that's not really creative code at all. Um, it's it's not clever and it's not uh complex. So, it's really simple. And so, if Claude can do that for me really quick, I'm going to have it do that for me really quick. Um, okay. Yep. Now, we need to go ahead and define those, right? So, let's throw in the death particles here and then the hit particles here. And I believe they're just going to instantiate on the enemy, which might be a problem because they're going to bounce out of the enemy and it's going to cause some weird collision issues. So, let's double check and see. Well, that felt good. There we go. It's looping, which is fine. We'll fix that.
Okay, so one thing we could do with the death particles is just obviously want to make sure that the particle system is not looping. The same is true with the hit particles. Where are they? Yep, turn off looping for that. But what I might also want to do is have a random renderer um of like of sparks maybe. So I'm gonna inside of the hit particles, I'm just going to call this spark particles and I'm going to be able to reuse this one in both the hit particles and the death particles. Uh now some of you might be way more advanced than me and you don't think what I'm doing is quick and impressive. I understand that. However, there's probably a lot of you in the chat who are thinking, "Man, Thomas is really
fast. All of this stuff, and I talked about this yesterday, all of this stuff, I've done it so many times." Um, [snorts] and I understand like the I understand which which part of the process I'm on. It's kind of like a a a GC for building a house. A general contractor is going to know every single step, whereas someone who's [snorts] new, maybe even the homeowner who's building the house, they're not going to know that all the different steps. And so in my head, I've got all these steps I know that I'm going to need to do. And so I know which prefabs I need to create. So just keep that in mind. It just takes practice. Okay. Got these spark particles here. Uh I'm going to go to my art. Going to go to my enemy here. Um I'm going to duplicate the enemy eye. I'm going to call this enemy spark. Honestly, this is just a spark. So I'm going to move this one into our world materials. That's good. Uh, I could drag this onto my spark particles. And so now we're
going to see glowing spark particles. I'm going to set it to 0.1 and then 0.0 five. So now we have these spark particles as well. Right? We don't need destroy object on the spark particles because it's going to destro be destroyed by its parent. Right? And I'm going to make sure that these are applied also to my death particles as well. Make it a child. Make sure it's transform is good. We are all set. Hit play. So now we have spark particles and death particles. Death particles. We can make the spark particles a little bit bigger. Right. We do two or.3 maybe. And then set this one to 0.1. Okay guys, let's take a look. Okay, those those spark particles initially are ugly. Here's what we're going to do. The hurt
particles, guys, we're going to be a little bit clever here. The the hit particles, what we're going to do is we're going to turn off collision. I know that sounds dumb, but I don't actually want any collision for the hit particles because they don't last very long and they're kind of small. They're also causing problems because they're spawning inside of the collider of the enemy and they're like looking weird. They sort of stop, right? Um whereas the death particles because they're spawning after the destruction of the enemy or like close to after, we should be good. So, let's double check. Particles are your friend. There it is. Okay, let's add a light to our hit particles. Um, I'm going to add a light
to the spark particles, actually. So, the spark particles, what I'm going to do is create a light here. Um, this is going to be a point light. I'm fine with that. And it's going to be yellow, kind of orange. And the benefit here is this this spark particle is going to make it feel like those particles in in the hurt animation and the flash is all emitting, right? No, here's what we're going to do. Let's change this. Let's go to our enemy here. And what [snorts] I'm going to do for the enemy is when the enemy gets hit. This is so much better. The enemy flash here, I'm going to make the broad point light get super intense. I'm going to set it to like 25. Let's bring in the enemy into the scene and see how that's going to look. Okay, didn't work. Hold on one sec. [sighs] Okay,
guys. I'll be right back. Let me let me let me go help my wife with something. Hang tight.
Okie dokie. Let's go. All right. Where were we? Okay. So, yeah, we're going to have this light flash. So, we're going to take the broadpoint light and I'm going to crank it up like that. Um, that's fine. And then we're going to go back to its normal uh, which is 9.2. Really quick. It's a really quick flash. Okay. But we also want to do it with the uh, the eyelight here. The eyelight. What we want to do is um I'm actually going to move it out and then move it back to its original position. Let's see how that looks. See why we're doing that?
Now, the death particles, we're going to need to have them have a light. Um, and and that's so that it feels like there's actually an explosion occurring. Um, so I'm going to get rid of this here. Let's go to our death particles. Guys, don't underestimate the value of using point lights and just getting light flashing and flickering in your game. I'm going to add a point light here to my death particles. Um, this is going to be kind of um probably not something you will Well, we can add a point light to the spark particles. Let's double check and see if this works. I've always had trouble with this and I don't know why, but incorporating lighting to particles has always been something I struggle with. It's the one part of Unity that I always
get a little frustrated with. Just doesn't work. Um, so we're going to spark particles and go to our lights. Add the point light and see what happens here. If I disable this, what happens? Nope. Uh, you set it to Z one maybe. And then this what I've always struggled with. There we go. Okay. That's kind of cool. There's just so many. I don't like that. Oh, ratio. We're going to do 02. There we go. I just hate that. I'm going to set it to five. Maximum lights. I want a maximum of two with a ratio of one. I don't like that. So, that's what I told you. I don't love that. So, what
we're going to do is we're going to create an animation here just for this light. And we're going to call this a very generic name, light fade out. Okay, very simple. We're going to go with an intensity of five and then just slowly go to zero. So, that's going to be the death light. Okay. Um, just make sure we set the uh loop speed to zero or not not loop. We don't want it to loop. So now there's going to be a point light that fades out like this. And that should be it. Let's apply all there and then delete it and then take a look at how this all looks. Let's bring one over here and see how it looks. Good. Maybe more intense. Okay, that's great. Uh, but yeah, let's just go a little bit more intense here.
Crank up the range to be like 80. And then the fade out is going to be pretty intense. We're going to start with like 25. Okay. And then it's going to slowly go out. So, it kind of looks like an explosion is shrinking. Great to see everybody. Come on in. Come on in. Oh, that looks great. Okay, let's add one more particle effect. Um, and that's just going to be a smoking particle effect. We just need smoke. Smoke is a big deal. Um, it makes things feel hot and steamy. Um, we could even add a little bit of particle effects to this the scene itself. Um, but in the case of the uh enemies, what
I'm going to do is just create this sort of smoking generic uh particle effect and then we're going to take that particle effect and we can use it all over the place, right? So, what I'm going to do is just set this emission to a sphere. Set it to zero. Right. I don't want it to have a speed. Where did it go? No, that's the start size. Start speed. Good. Uh, start size going to be random between two constants. We're going to do 02 and then two. Uh, we're going to have it fade out over time. There we go. We can change maybe the random distribution a little bit more here. There we go. And then actually, let's do this. Let's have it fade in and out. There we go. And so as things move, if you make sure you set this to world and not local, as things move, we're going to have this smoke, right? So I'm just going to make
this a little bit dark. Let's turn on the lighting here to see how it's going to look. Yeah, that's going to work for us. Maybe have it fade in a little bit quicker. Um, so we're going to call this smoke. Put my particles here or my prefabs. So there's smoke. So if we go to our enemy here, drag our enemy in, I could add that smoke effect to make it feel like it's a little bit more organic. Okay. Uh that particle effect isn't the best because it's not using uh soft particles, meaning it it it clips into that uh the quad right here. But I'm okay with it. Let's add a little bit of color to it. Maybe orange.
There we go. Um I'm going to apply that to the smoke. There we go. So let's see how this looks with our enemies. Okay. Here they come. I'm not seeing the smoke for some reason. I'm not seeing the smoke. Where's the smoke? Oh, Thomas. Okay. Uh, smoke. I didn't put it into the prefab itself. There we go. So, as it's moving, we should see this trail of smoke. Let's do a random uh color colorization so that it looks a little bit more random.
Yeah, that's what we want. That's what we want. But not so intense of its alpha either. I'm going to hit apply all here to my prefab to the smoke prefab so that we can use that elsewhere. Here he comes. [groaning] Great. All right. um that smoke effect. What we can also do is make sure it's added to the hit particles. This and I I I I swear to you guys, this sort of subtle smoke effect is also used in blood particles. Um in like AAA games, you'll see a subtle mist. It's like almost like just a faint blurry mist. There's something that's really moist and and tangible about just a faded
sphere. So, if I add that to my death particles here, and I can set the speed, a subtle speed uh randomization here. We're going to do 0.5 and one. Yeah, like that. Um, and then lifetime is going to be one, maybe even 0.5. There we go. Emission, we're going to do a burst like that. And we'll do it pretty fast. There we go. All right, we're going to
create a prefab variant out of this. We're going to call it smoke burst. Uh, drag it into our prefabs here. Um, I'm fine with it being an original prefab, actually. And there we go. So this is going to be the hit effect, but we want to make sure it's not looping. And so the hit particles looks like this. See? So now we have And by the way, let's let's create the start lifetime to be a little bit uh random because right now everything's fading out at the same rate and it feels dumb. There we go. Okay. Also give it a little bit of gravity five. There we go. All right, that's our smoke burst. Let's go to the death particles as well and add it there. So now the death particles. We're going to make the smoke a little bit bigger.
There we go. That's death. All right, let's see how it looks. Oh, that feels good. Told you guys. Okay, let's add that smoke particles to the uh player controller as well. In this case, we're going to go to our weapon. And this is why it's so important to um have all of these prefabs available at your disposal. Um, so let's go to smoke burst here. And I believe we could set it as a sub emitter, but we're not going to make it so red. We want it to feel like gray smoke. Also, I I don't want it to have a gravity modifier. And then we're going to do um not so much speed.
There we go. So, just some subtle smoke, man. Coming out of the tip of the gun. We can set it as a sub emitter of this particle here. Inherit everything. Um, I don't believe actually we want to inherit everything. We just wanted to emit. So, we're going to set the emission to zero. Um, emit probability one. Let's see how this works. So, there's our shoot particles. I'm going to set this to 10. Okay, good. The smoke's coming out. Awesome. Okay, that should do it. Uh, we don't want it to start on awake. And let's just see if that did it for us. Let's hit play. Here we go.
Okay. The smoke is a little dark. It's very annoying looking or it's a little It's a little opaque is what I mean. So, let's just drop it down in opacity. We don't want to see too much of it. Um, yeah. Let's take a look. Yeah, you can create all these particle effects in in Photoshop. Yeah, you can see a little bit of black there. Okay, let's add one final thing here, which is remember we have that particle effect for our um hit particles. What we can do is just add to the player. This this might sound very strange to you, but we're gonna add to the player um uh the the smoke burst.
I know that sounds weird, but watch this. I'm going to make it feel like there's there's uh volutric fog here. Now, obviously, we could use a volutric fog post-processing filter, which is probably much smarter um to do, but in my case, I'm totally fine because this is a small scene. Um, I'm I'm going to turn off the gravity here. This is going to be really interesting. Watch. The reason we want it on the player is because we don't want a giant set of fog throughout the whole level. We want it only local to the player and it follows the player around. And so, we're going to have all this subtle fog. Um, I'm going to set the rate over time to five. I want the max particles to 1,00. That's great. We're going to set it to loop. There it goes. Start speed is going to be zero. It's going to have a lifetime of five.
Five to 10. There we go. And then we're going to set its shape to be a cube or a box. 25x 25 by 25. And so now we're going to have these particles hanging out around the player. just subtle almost like uh you might see in like um we're trying to mimic fog here. So let's do 25 maybe even 50 and then um let's do 50 to 100 or maybe 25 to 50. And then let's make the max particle size 10. Yeah, there we go. So we're going to do 10 and then five. How about tw 10 to 25. There we go. And set it to very low. Very, very low. And maybe have some of it be a little bit pink. There we go. Very, very subtle. You want to be
careful here. You want to be careful here that it's not too aggressive because it can get really dumb looking really, really fast. Um, make sure it's set to world. Make sure it's set to 0 0 so it's always following the player around. Let's hit play and take a look. And we'll make sure we pre-warm it. And I'm also going to add a flip book blending to it or um I'm going to make sure I add that that flip what is it called? Soft particle effect to it. So this is going to be a world material. I'm going to just duplicate this one. I'm going to call this fog. Uh, we want to set it to be a universal runner pipeline particle unlit. Uh, flip flip, not flip book bending. Um, shoot. We might need to set it to be a sprite.
No, no, no, no. For some reason, I'm not seeing it here. It's probably because we need to set it to transparent. Yeah, there we go. Thomas, you idiot. Um, okay. We're going to set our universal render pipeline. Go to particles. Go to unlit. That's good. Transparent. Set. Additive is good. We're going to make sure we set it to soft particles with a near of like zero. And far is going to be like 10. So, what that's going to do is that's going to make it fade into the ground. So, for example, if I go to my smoke burst here, I'm going to call this uh univer or uh fog particles. Uh if I hit play here, you'll probably begin to notice here that it's clipping right there. See that? What you want to do is use this new one we just created, which is fog, so that it fades into it and you can't see it. Okay, that's it. Uh five and then 10. Yeah, let's make it a little bit smaller here.
Okay, let's save that. Um, I'm going to set it to pre-warm as well. Pre-warm is just going to make sure the particles instantly appear. They're not going to wait to start playing. So, now we just have this subtle fog occurring. Now, we got to make sure we put on the right sprite because I'm seeing squares default particle. Let's use that one. And I want it to be just white. There we go. That should do it. Let's hit play. There they are. I'm going to make some of them bigger. The fog in my muzzle is a little too intense as well. I'm going to get rid of that really quick. Shoot particles. There's our smoke burst. It's just way too way too dark. It almost blocks the camera. Um there's our fog particles. We're going to set it to 25, maybe even 40, and then 25. There we go. Hit play
and take a look. [snorts] Little intense for the fog. Still a little too much. Okay. A little intense for the fog. Uh, so just drop down to like two and then eight. Good. Okay, good, guys. Good, good, good. Um, that's all set. Let me think here what else we need to do. Uh, the reticle. So, we're ready to move on. Jordy, Jordy's my editor. I'm letting him know here. We're ready to move on to the reticle and the UI stuff. Let's double check to be sure.
Yep, that's good. Okay, we're ready to move on to the reticle stuff. Um, let's go to our type in here and go to our reticle. Uh, what is it? Crosshair. What is it called? Let's double check. We have this knob here. I'm going to set it to white. Um, 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. Um, I'm going to add that here so that I can use that off-white for everything. Um, and we're going to say to Claude, we're going to say, um, make sure the crosshair turns a red red crosshair uh red color if it's pointing at an enemy. So, this
it's probably going to have to create a new ray case raycast. You may need to create a new permanent raycast that looks to see if we are pointing at an enemy. uh have it turn back to its original color. If we're not looking at an enemy, make sure [snorts] the red color is a variable called red crosshair color. All right, so it's going to write that for us. Let's go ahead and clean up the UI for um for the health, enemies killed, and score. So, we're just going to use a cool font here. Um I think what I want to use is let me think which font I want. We can use Monoserat. I mean, we can always use
that one. Um, so I'm going to go to my fonts here on my PC. No, let's use um let's do Babis Noa new. Babis new. I can't find the font. Give me a sec, guys. One sec. Let's find this font really quick. famous new download. I'm going to just grab it from I'm going to grab it from Google really quick. We're going to bring this font into Unity. Just the TTF. One sec. Let me let me share my screen. One sec. Okay. Let's go to create a new folder called fonts.
Open that up in explorer. Just gonna paste in that font for Babis. And now we can create a new text mesh pro font asset from this. There it is. And now we can go ahead and use this in our canvas. We should be able to. Let's double check here. Yep. Okay. Uh the knob we're going to keep the way it is. um that that is being written right now by Claude. So, what we're going to be doing is dragging in this new font to our timer. Oh my goodness. We got to be careful here. Something just happened. I don't know what just happened. I don't know what this sub mesh is. Um, why is it creating a dang sub mesh? I hate that. Let's figure this out. Give me a sec,
guys. I don't know what's going on. This is kind of weird. Why is it doing that, guys? Isn't that weird? I need to delete I'm going to delete the font asset and see if we can do this differently. Am I doing something wrong here? Let's double check. Why is this happening? Why is this happening? SDF. Maybe I need to do it here. I don't know. I don't know exactly what's going on here. This is kind of weird to me. Okay, so
we were on a roll, guys. Maybe that's all we needed to do. I don't know. I'm unsure what's going on here. Look, it's creating the sub mesh. And I don't know why. Why are you doing that? It's kind of annoying. Uh boy, I don't know. Anyway, we're not going to worry about it. Jord, you can cut this part, guys. It's just because I got to run soon, so I just want to make sure I'm getting everything done by the end of this session. I'm sorry. Um, but I think overall it's going to look fine. Um, 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. Want to make sure it's wide enough to show our health, our timer and enemies killed. There we go. Okay, let's hit play and take a look. And then we'll we'll we'll make sure our reticle is is uh correct as well. We're going to do all caps for the for the um font. 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. Kind of like I don't know. Um 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. I'm going to go to uh noun project which is I have a subscription to I'm going to quickly create a UI file 3840 x 2160 in Photoshop. I know you can't see my screen. Hang on. Okay, I'm going to find a heart icon really quick on now project. Give me a sec here. I'm going to drag that into my file here. This is a 4K canvas, transparent. It's going to be a PSD file. I'm fine with it just being PSD for now. Uh, let's go to this first person shooter game that we're creating. Go to our art, new folder, UI. We're going to call this UI.psd. Okay, let's go ahead and download our heart. Okay, we're also going to go type in enemy and just do an enemy
image. And then also we have one other UI element. I can't remember what it was. Let's hit play and take a look at what what the other one is. Is maybe a timer. Oh, the score is updating alongside the kills. Yeah. So, score is useless. Um, so it's score is useless. So, we're going to get rid of that. So, we're gonna have enemies killed and health. And all we're going to do is go to our UI file here and drag in that new download. for the ghost. That's our enemies. And then this is our health. Okay, that's it. Make sure they're white. And obviously, you know, you want to
make them about the size of the screen. We're going to have health up here, ghost over here. I'm going to make sure they're white so that we can tweak the color in Unity. Right. Just like that. That's our UI. Go into Unity here. Go to our UI. Make sure we do a sprite. Uh, make sure you set alpha is transparent. Remove PSD mask. Good. Set it to sprite multiple. Good. Good. Good. Apply. Install 2D sprite package. Let that run. Let's go back to Claude and see what Claude came up with. I'm sure it's great. We're just going to copy that into our weapon controller. We should be good with that. It's going to basically just change the UI, the the reticle based on what we're pointing at. I'm going to go ahead and get this to set up automatically here. There we go. Make sure the same size though. So, I'm going to do 100 by 100. Nice and wide.
This going to be heart. Center it up. Same here. 100 by 100. I like all my sprites to be the same size even if there's, you know, empty transparent space around it. Um, this is going to be enemies killed. Um, make sure it's centered. Apply. Now, you're probably think, what's all this empty space for? All of your other UI, right? Right now, we're just doing this. Okay. So, I'm going to go ahead and just make sure that um we have an image here. So, I'm going to do an empty game object here. I'm going to move it into my It's going to be our uh health icon image. It's going to be our health icon, right? Move it up here. Just drag in our new heart, right? Set it to the native size. Zoom in here. U make sure the color's correct. Right. And it's going to be right here.
And then the health right here is going to be right here. And all it's going to say is 100. Boom. Just like that. And the same is true with the other one over here. Could probably change the spacing to like 25. Yeah, there we go. Enemies killed. Same thing. Space to 25. All it's going to say is something like that, right? Um, and then we're going to have a enemies killed icon. Drag that in as well. Make sure you set it to be on the right side. You want this one to be on the left side. Anchoring, right? Pull this over here. Make sure it looks good over here. Nice even spaces, guys. Okay. 150. Negative 150. 150. Negative 150. The same is true with the enemies killed. We want it to be nice and clean with plenty of margin. Don't make the mistake of not having
enough margin because uh if you're going to ever port, this need to be top left. If you're ever gonna port to um Xbox or PlayStation, you're going to have Xbox or Microsoft come up to you and say, "Hey, your game is rejected because your margins are wrong." So, you got to give plenty of space. That's probably not even enough space if I'm being completely honest with you. Okay, that looks good. Um, 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 because that's kind of what the color is here. The normal crosshair color is going to be this. We're also going to need to probably reference No, we're good with the crosshair. Let's see if this works. Let's hit play.
It's not working. Okay, for some reason the crosshair isn't changing. So, let's go ahead and tell Claude. Um, new crosshair setting section. New crosshair image reference to your crosshair image component is there as well. Thomas, it's right there. Um, so we need a reference to that obviously. So, this is going to be the image, I believe. Is it this? Yep. Let's go ahead and create a crosshair really quick. Um, I'm just going to go to noun project. type in crosshair. And we're also going to need a image effect that or 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. That'll do, donkey. It's amazing how important a crosshair is. Um it makes things feel so good.
So, let's just shrink it down. We might need to increase the width of those lines. So, I'm going to add a stroke here. Do like that. Then, we're going to do a color overlay. White. Same with the stroke. White. There's our crosshair. I'm going to duplicate this and do this. So, this is going to be our hit impact. Okay. And turn off the stroke. So, that's going to be our hit impact. Frankly, I could probably do something like this. like this here. See? Um, maybe go a little bit smaller. I'm going to rasterize this really quick. Hit impact is like that. I'm going to fade it out in the center. There's a hit impact. I'm going to go ahead and rasterize this. Center it up. And then maybe even expand
the selection a little bit so it matches the width. So something like five. No. Select. Modify. Expand. Something like two maybe. Yep. There we go. All right. So there's our hit reticle. And then we're going to put that over here. And then this is going to be our crosshair. Save it. And we're ready to jump into Unity. Get those sprites set up. So this one is going to be like that. 150 x 150. This is going to be crosshair. Okay. Make sure it's centered. And we'll increase the resolution in just a sec. Does that make sense, guys? And the same is true over here. It's going to be 325 by 325. That's fine. This going to be hit reticle. Okay. Center it up. Pretty good. Hit apply. Okay. I'm going to go ahead and bring in the crosshair image. Make sure this is called crosshair. Bring it in. Set the native size. Set it
to one by one by one. There it is. Let's hit play. Take a look and see if that that color is changing. It is good. Okay. What we want to do is make sure that reticle is not so obnoxious. I'm going to scale it up. It's it's uh it's too tight. Um, so when I say it's obnoxious, what I mean is it feels just a little too tight. You want to give some room to it. Maybe fade out the center like that. Save it. All right. Then what we want to do is also take that crosshair and we're going to create a crosshair or a hit reticle. And I'm going to just bring in our hit reticle. Set the native size. There it is. Uh, zero position maybe. No. Looks like we need to go into the actual UI itself and center it up a little bit. Looks like it's a little off center. Yeah,
keep going. Yeah, this is tough. There we go. All right, that's our hit reticle. Okay, so what we're going to do is create an animation here. We're going to call this hit reticle idle. Whoops, I named it wrong. No, that's correct. So, this is hit reticle idle. What do you think it's going to be? Zero alpha. And then we're also going to create a new animation called hit reticle flash. Good. And all this one's going to do is go red and scale up. Start like this and just scale up and go
out. You may even want to go in. Let's double check. Yeah, we'll go in pretty fast. And it just goes to zero. Go. It's a little big. So, we do like that. And this just going to indicate to us, hey, we just hit an enemy. Idle state's good, go ahead and set a parameter called flash. Create a transition. Right. If trigger flash occurs, no transition time, go back to it after exit time of one. Um, that's fine. Good. This does not need a loop. make a transition to itself because we want it to occur all the time, right? Even if it's in its even if it's playing its own animation, we want to be able to transition to itself, right? All right, that's all set up, ready to go. Now, all I got to do is tell Claude,
please also play a uh the trigger flash for a new animator called reticle. Uh, hit reticle animator. This flash trigger occurs when we hit an enemy. Perhaps put this in the enemy script. Okay, while it does that, let's double check and make sure everything is good. Hit play here. We also probably want to play an animation with that reticle.
That's good. Okay. All right. Let's see what Claude came up with. I'm sure it's great. Um, what is it saying? I'll add the flash trigger to the hit reticle in the enemy script since that's where Let me update the weapon controller to pass a reference to itself when dealing damage. What? Added hit reticle animator field to the crosshair section. Added trigger hit reticle flash method. Yeah. Yeah. Yeah. Okay. Yep. That's correct. Okay. So, let's do the uh script for the weapon controller. Good. That's all set. And then this is going to be the enemy script. That's all set. Okay. Let's go
back into Unity. Assign those. So, the hit reticle is going to make play that flash animation. Um, all we got to do is go to our weapon controller here and make sure we assign the hit reticle animator, which is right here. There we go. Um, apply all those changes to the player controller. Good. Take a look. Hit play. It's It's clawed in Visual Studio, but it is co-pilot. Here we go. IT needs to occur during death as well. So, let's go to our enemy uh really quick here and make sure that the reticle flash is occurring all the time, no matter what. Right? So, that's going to be occurring here. Okay. The reticle 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. This is the
bonus section. Jordy bonus for the skybox. We're going to just add some blocks here. Watch this, guys. You're going to love this. I'm just going to add some simple buildings here. They're going to be squares. So, let's actually do the the clouds first. We're going to do some clouds in the distance. probably going to need to be smaller, but we're just duplicating all these clouds in the distance. We're going to merge the layers together. Fade out the bottom so they're coming out of the no out of the sky, out of the horizon. And just fade out the left and right so that we're not getting weird uh tiling issues.
All right. What do you mean you don't like how much I rely on strings? What does that mean? Can you explain? And maybe I'll try and explain what what my thought process is. What do you mean by relying on strings? We have our clouds here. There we go. Looks good. Okay. Awesome. We can do another layer if we want. Yeah. What do you mean by relying on strings? What do you mean in my code? Where am I relying on strings? You can't you can't set a trigger that's not a string with an animator. There's nothing else here that's relying on strings except for that. That's because that you're passing through a string. Unless Unless I'm confused. Uh what else you're saying? What do you mean, Gupta? What do you mean?
You can't pass through anything other than that. Going to set the fade fade this out here like this. Fade this out here. And now we have a cool sort of blurry layer of clouds. And it might blur the other layer as well. Well, it doesn't even matter if it's a prototype. You cannot rely on anything that's not a string when you're passing when you're doing animator triggers. Does that make sense? I wish it was different, but that's the way it is. Thomas, he means string references, which what you're doing is normal lol. No other way around it. You could make it a constant variable so it's all the same.
You can pass an int ID, can you? Maybe I'm going to learn something here. Like this. Oh, you can. That's great. Yeah, but either way is fine. I don't have an issue with either. Um, that's cool. I learned something new. That's great. My apologies. I love those clouds. Let's Let's uh fade them out a little bit. So, this actually not fade them out. I'm actually going to make them a little darker. Save it. Take a look. We're going to do a quick post-processing tweak to all of our post-processing here. Uh let's go to our global volume bloom. I like kind of an intense bloom that's soft with a low threshold or without a We're
going to do a little bit higher actually. We're going to tint it. Make it a little bit warm. Right. It's a little intense honestly. So we're going to do one. There we go. Maybe two. Um, scatter it a little bit more. Motion blur is fine. Vignette's fine. Um, let's hit play. Take a look. Oh, let's go ahead and set the the the canvas here to screen space camera. Uh, and set the camera so it's bloomy as well. Okay. Um, let's go to play maximized and take a look at the final product. You guys ready? I hate motion blur. I hate motion blur. It's so bad. Just get rid of it. Okay. Now, obviously, you'd have you could put it on a second camera so that it only motion blurs outside of the gun.
Okay. Those are super bloomy. Let's double check something here. Okay. Yeah. tweaking those post-processing values, guys. Scatter them to There we go. You ready? Let's take a look. Okay, that's a little bit too much. Okay, let's take a look. Oh, okay. So, we can't set the canvas. Let's double check the post processing. Post postp processing got screwed up. Um, set it to point. No, no, no. The postp processing is correct. Uh, let's
go to our canvas here. We're going to set it back to overlay. Unfortunately, it's causing some rendering issues with the uh the crosshair. All right, let's take a look, guys.
[laughter]
There you go. That's the final result. Um, and Jordy, you could show that. This game over screen's fine. We we we could
probably make that prettier. But that's the idea, guys. That is how you make a super basic. If you watched the very beginning, three episodes ago, how boring that was compared to what we got here. It's pretty cool what you can do with juice. So, hey, there you go. What do we think? Hopefully you guys found that helpful. You learned a lot. And be sure to watch the other live streams if you if you forgot to to watch the other stuff that we did. Um, and there's a super cut coming out with all of this in one big video. Um, yeah. Cool. Love you guys so much. Hope you enjoyed your time.
Auto-generated captions from YouTube — names and numbers may be misheard.
Thomas Brush · 2026
Naavik · 2025
Comments