Unreal Engine 5 for Beginners - Create your first game | Ekaterina Usova | Skillshare

Playback Speed

  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Unreal Engine 5 for Beginners - Create your first game

teacher avatar Ekaterina Usova, Artist

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

46 Lessons (3h 39m)
    • 1. 1. Introduction

    • 2. 2.1.1 Character and animation

    • 3. 2.1.2 Import and Organize

    • 4. 2.1.3 Logic, Even Graph

    • 5. 2.1.4 State Machine

    • 6. 2.1.5 Blend Space

    • 7. 2.1.6 Connectig BS in State Machine

    • 8. 2.1.7 Change Mannequin

    • 9. 2.2.1 Jump Structure

    • 10. 2.2.2. Download Animations

    • 11. 2.2.3 Import and Logic Unreal Engine 5

    • 12. 2.2.4 Animation Transition for Jump

    • 13. 2.2.5 Testing and Adjusting Animation Unreal Engine 5

    • 14. 2.2.6 Press Key to See Animation

    • 15. 3.1.1 Download a Coin

    • 16. 3.1.2 Coin - Project Setup

    • 17. 3.1.3 Coin - Creating Blueprint

    • 18. 3.1.4 Collision and Logic

    • 19. 3.1.5 BP for Collectables

    • 20. 3.1.6 Change the look of a collectable

    • 21. 3.1.7 UI Display the Score

    • 22. 3.1.8 Binding in Widget

    • 23. 3.2.1 Platform - Download Model

    • 24. 3.2.2 Import and Prototyping

    • 25. 3.2.3 Basic Platform BP

    • 26. 3.2.4 Jumping Platform BP

    • 27. 3.2.5 Moving Platform

    • 28. 3.3.1 Enable Double Jump

    • 29. 3.3.2 Logic

    • 30. 3.3.3. Find a 3D Model

    • 31. 3.3.4 Blueprint Double Jump - Mesh

    • 32. 3.3.5 Blueprint Double Jump - Event Graph

    • 33. 3.4.1 Trigger Box to Restart Level

    • 34. 3.4.2 - Add a Trigger Box for win

    • 35. 3.4.3 - Add a UI Widget

    • 36. 3.4.4 - Buttons for the widget

    • 37. 4.1.1 Widget Design

    • 38. 4.1.2 Widget Graph

    • 39. 4.1.3 Menu Level

    • 40. 4.1.4 Level Blueprint

    • 41. 4.1.5 Mouse Cursor

    • 42. 4.1.6 Add a background image

    • 43. 4.2 Where to find environment

    • 44. 4.3.Creating a real game

    • 45. 4.4 How to export your game

    • 46. Thank you!

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.





About This Class

So you want to learn Unreal Engine 5...

Welcome to this course, where you step-by-step will be learning a lot! 

If you didn't watch my previous class or it is your first time meeting Unreal Engine, here's the link - https://skl.sh/3UuuSsN

Here we're doing more interesting things!

I hate when people just show a script and say - that’s how you do it. That’s why in this course, my goal is to explain how everything works so that you can use the elements you learned in different cases, modifying blueprints that you already know.

By the end of this course, you’ll be able to create your own platformer game, which can include:

  • character animation,

  • double jumps,

  • collectables (coins),

  • jumping and moving platforms,

  • triggers  - and much more!

You’ll be able to program a menu for your game, using UI Widgets, and find free assets for your project. Moreover, you'll be able to export the game so that other people can play it.

Yes, this course is perfect for beginner game developers, but even if you want to use Unreal Engine for other things, you’ll find a lot of useful information here, like working with light, collisions and creating blueprints.

More than 5 hours of practical and not boring content - is ready for you to watch! So let’s dive in.

Meet Your Teacher

Teacher Profile Image

Ekaterina Usova



I am a designer a creator, currently living in Florida USA.  I have a passion for teaching people and creating amazing things. 

Do you want to learn new skills that are in demand right now? Do you choose to create, to be an artist in the modern world? Welcome to my courses!

My courses are designed for such an enthusiastic people as me, who always want to learn more! 

See full profile

Class Ratings

Expectations Met?
  • 0%
  • Yes
  • 0%
  • Somewhat
  • 0%
  • Not really
  • 0%

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.


1. 1. Introduction: So you want to learn Unreal Engine five. Welcome to this course where you step-by-step. We'll create your own game from the previous class link in the description, you already know basic things such as projects, actors, and components. Now it's time for more interesting things, like any migration, triggers and more hate when people just show a script and say, that's how you do it. That's why in this course, my goal is to explain how everything works so that you can use the elements you learned in different cases. By the end of this course, you'll be able to create your own platformer game, which can include double jumps, coins, moving platforms, and much more. You'll be able to program menu for your game and expert the game so that other people can play it. Yes, This course is perfect for beginner game developers. But even if you want to use Unreal Engine four, other things, you'll find a lot of useful information here. More than 4 h of useful and not boring content is ready for you to watch. So let's dive in. 2. 2.1.1 Character and animation: This website is just one of the sides where you can find characters and animations. I like it. Let's use it for this tutorial. So when you create your account, you then can browse through all these characters and just choose which character you like. It does matter, although I didn't test them all and I'm not sure that they all work great, but probably yes. So you can choose any character you like. Then when you choose your character and I'll be choosing this, this guy over here. Yeah, this is my guy. It reminds me of the Chronicles of Narnia. Do you remember the movie? Yeah, so I like him. Which is you character and then you go to the Animations tab. And here you can see a lot of animations. So first you can just click through and see different animations. But for this tutorial, we're going to use some very simple animations. Here in the search bar. I'm going to start with the IDL. Idle animation first. Again, we have many idle animations. Let's choose the one that I liked most. We have this one very, very basic. We have the swan and ready to fight. Let's just choose this I don't position. And by the way, if you want to see your character in details, then you can zoom in and out with your mouse will. And you also can rotate it like this. Just to look around your character. So when you select the idle animation, you then need to go here, Download, and then downloaded with skin first. Because that means that it will download with the mesh, with the skeleton match with the character itself. So then you click Download. I found out that it's not always work perfectly with the first animation. So you need to download these idle animation without skin as well. Because sometimes Unreal Engine doesn't recognize that the reason animation inside the file. So just choose without skin and download it again. For the next animation we need walk, right? So what about walking? I need something pretty basic. Okay, that's happy. That's two. That's too much. Maybe just like this. Okay, It's not bad. But you see that the character is moving straight. And in this case we need to check this in place, checkbox just like this. Then you can see the animation. Let's see what else we have. Because I remember something a bit more interests in that that again in place. Yeah, I think this one. Okay, that's fine. So again, click Download and forget to click this checkbox in place and without skin. So you need to download width scan just once to download the character itself. And after that, I'll all the animations. You download them without skin. Again, download. And next animation is run. Maybe that's too active. There was this one. This one works fine for me. But you can choose any. Alright, again, without skin download. And for our final animation, we need Jump. Bye. Let's type jump first. Actually, jump is a very complex animation because you can see that it consists of different phases, like when the JumpStart's, then when the character is in the air and then the character meets the ground. And there will be another tutorial where we will be discussing this jump animation thing. But to do something really basic that will look like jump, we need falling. Okay? Not the falling like this type of falling. You need to type fall a loop. Because I have checked this one. And it worked pretty good. Very simple. We will do this simple jump first. And then after you get comfortable with the process, I'll show you how to make a real jump. 3. 2.1.2 Import and Organize: I'm going to create a new project, but it's not necessary. You can keep working with the same project. Let's just push escape and go to the Content Browser. If you don't see the cantons browser, you can go to Window and then Content Browser, and select the content browser. Now let's find the folder with characters, open it and find. And here we have two folders. We need another one. So new folder. I'm going to call it my character. But you can give it any name. We're going to input all the files that we have downloaded to this folder. All right. So here is the files that I have downloaded. I did one thing. You remember that we have downloaded the idle animation into variations. The first one was with skin, in other words, without skin. So the one with skin I called character and the one with their own skin, I called idle. And the other is I didn't change their names, so that's the names that the website gave them. First you go with a file that contains idle animation and skin, idle animation and character. In my case, it's this file. So I'm going to drag and drop it here. You need to check the skeletal mesh here the skeleton should be none. Okay, Then all you might see a lot of errors, which is fine. Just click Clear. So you can see a lot of different files here. The main file. So we have textures, we have normal map, we have materials, we have character. If you hover over file, you can see a description like Skeletal Mesh or animation sequence. In this case, I see that the animation was inverted here. So we have this idle animation and we have the character himself. Perfect. Let's go to the other animations then. I'm going to delete this idle animation because we have successfully imported it. So I'm going to just select these files and drag and drop them here. Okay? And that's important. We need to select the skeleton of the character, not the mannequin. Okay? All right, that's correct. In all. Again, you can open each of these animations and you can take a look at them. Okay, Now it's time to organize it a bit. But first, don't forget to click Save all. It will ask you, do you want to save everything? And yeah, you do. Okay, now let's organize it a bit. So first right-click and select a folder. So I'm going to call this folder materials or maybe the textures. Let's call it textures. And I'm going to select all the textures here. And just drag and drop it like this. Move here. Okay, Great. And the other folder, again, new folder, this time animations. And I'm going to choose older animations that we have. So this one, this one, this one, and this one here. Okay? So now we have this skeleton physics asset and skeletal mesh here. If you want, you can put them to the other folder, but I'm fine with this. 4. 2.1.3 Logic, Even Graph: Alright, now it's time to create a blueprint. Let's go right-click here and select Animation and then find Animation Blueprint. So basically Animation Blueprint is a script where you can manage your animation. So here you can choose your character and click Create. Let's rename it to Animation Blueprint. So AVP, Animation Blueprint. And then character. I'm going to open it. It opens a separate window. But what you can do, you can drag and drop it like this. I think it's more convenient. So what we see here, we see Anim graph and even grab if you have tried blueprints before, you know what Event Graph is. And Anim graph is kinda new thing for you, right? So what it has its output pose, and that means the result. So it's final animation pose for this graph. We also see our character in the T-pose and we see functions, variables, and all the other tabs that we usually see a when working with blueprints, we're going to create some logic here. First, we're going to check if the character is inside the game. And for this, we're gonna use node which is called, is valid. Okay? This one is valid. If you hover over this node, you can see it determines if an object is valid. What it means, it checks if the object is usable. So this is true or false boolean. It consists of the inputs, the outputs, and this place where we can select the object, okay? Because we need to check the object, so we need to tell it what object to check. So I'm going to select this node and connect it like this. This node is called try Get Pawn Owner. I think you know what bond is? This thing and chess. And basically in our case it means character. So why are we using this node? When dealing with animations, we need data to accurately display animation, e.g. how fast the character is moving, velocity, what is the orientation of the character as he is supposed to be dead and so on. The Animation Blueprint is always attached to a Skeletal Mesh Component. Since it's a component, it will obviously be attached to something, an actor as well. So we try to get this something with this node, which is called try Get Pawn Owner. We take this and we put it here. And now it knows that it needs to check this object. Then we need to check if character is in air. Why we need it? Because as I said, we won't be doing an advanced jump animation, but we will be doing some, some jump animation. And in this case, I just need to check if it's, if the character is in the air. Because if it is, then I want to see the falling animation. And if the character is not in the air, then obviously I don't want to see it. So to do this check, what do we need to do is to create a new node. It is called Get Movement Component, this one. And then from here we can do another function which is called is falling. Okay? So you can see it's pretty simple. You don't need to create a separate script where you will be describing what to fall means. You can just take the function and use it. So if you hover like this, you can read that this function returns true if currently following Boolean value, right? In what we can do, we can get this value. We can right-click here and then select Promote to Variable. Now we have this variable. This new variable was created and we can see it here in the list of the variables. Let's rename it, right-click Rename in air. And then we're going to connect this node, this one like this. Because this check-in affects if we need to have this variable or not, right? I'm just going to click clearly are here for now because I don't want this window. Okay, then the next thing that we need to do, you remember that we have downloaded idle, walking and running animations. So what I'm gonna do, I'm gonna blend these animations together so that we have this smooth transition from idol to walk into running. And to control. This blends in transition, we need to know the speed of the character. But actually it's not speed, its velocity. What velocity is its speed and direction? Velocity. Velocity. So velocity is speed in each axis, meaning its speed and direction. And to get the speed in a specific direction, we need to get the length of the vector because velocity, it's not a number, it's a vector. So it returns some value. You can see it's yellow color and when you're creating a node, it says vector here, vector length. And it returns some value. And we're again going to have promoted to variable. And you can see the type of the variable is float, which means number, width, decimals. We're going to rename it, rename speed. And then we need to connect these two together because this check-in is actual four balls of these variables. Okay? So we have created some logic here. And let's go back to the animation graph. 5. 2.1.4 State Machine: Now let's go back to the animation graph. In here we have this Alice would pose when you're working with innovation, you need state machines. So let's right-click type state machine. And here this new state machine, state machines are systems you can build in order to define certain animations that can play. And when they are allowed to play. This type of system is used to connect patients to movements, states of your characters, such as idling, walking, running, and jumping, just what we need. So we're going to click here and double-click to open. And you can see all state machines begin with an entry point, which is typically used to define the default state. And in most common setups, this will be the character idle state. But in this case I want to blend idle and to walking into running animation. So there's gonna be a bit more complicated than that. Let's create a new node and new state. Actually, I'm going to name it idle. Walk run. If you open it, you can see that it has its own logic inside, which results in some output animation pose. Right now it's empty. So besides the idle walk and run, jump animation, so let's add the other state, call it jump. And as you can see, now we have book. Now we have this transition from this to this, from idle walk run to jump. I also need transition from jump to either walk and run, right? I'm just going to drag and drop like this and create the other transition. And in the next lesson, labs blend this together. 6. 2.1.5 Blend Space: Let's blend this idle walk and run together. To do this, we need to go back to content rower. You can click here and open the content rover and go back to the folder. The character. Then right-click animation. And let's take a look. We have several blend space types. First is a offset. And the offset meant to contain mesh space additive animations as their samples. Typically, this, uh, used to create weapon or other look at a mean blend spaces. And we also have blend space, which provides all the main functionality of blended animations along the graph. And both blend spaces and aim offsets also support single axis variants. You can see a upset 1D blend space one D. You need this types when you need only a single axis of blended. By saying axis, I don't mean physical axis. I mean something. In this case, I'm going to blend it along speed. And in this case, speed will be our axis. Maybe you don't understand it now, but you will in a sec. So click here to create this type of file. Select our character. Let's rename it to blend space, which is B, S. And then idle. Walk. Okay, great. Let's click Save, Save selected, double-click to open. This is blend space. We have access settings here. Let's click here. And you can see that we have the power to create any name and any values for the axis. And in this case we have only one because we have selected one D type. So I'm going to give it a name speed because as I mentioned, I want to blend it depending on the speed. Minimum is zero and maximum is, I'm going to put 500, but 500. But you can put any value that you want and then just play with it. Now, here, you can see that the axis is now, is now named speed. We can manage it here, where animation starts with idle. So I'm going to drag and drop it here. That's the idle animation. If you click here, you can then manage this speed. It, I'm going to put zero because we need it to be in the beginning of the axis. Then next one is walking. Again, just drag and drop, select. And here you can choose any number. I will choose 150. And then slow run will be the end, which is 500. Okay, perfect. Let's click Save. And now we can click. You can see that we can click play and pause to demonstrate the animation, but we don't see anything now, that's because we need to hold control to set the preview point. So I'm going to click Play. It should be playing and then hold control like this. And you can see the green cross here. And you can see that my character is moving. Just like this. Perfect. If you don't like it, you can click, pause, then select a point that you are not happy with and change to other number. Let's see. Again, lay and then control. Okay. I think it will go back to 150. Okay. Just like this. Okay. Save. And that's it for the blend space. 7. 2.1.6 Connectig BS in State Machine: Let's go back to the state and connect the blended animation. So here you're going to double-click open it. You'll see the output animation pose. And here in this asset browser, you'll find our file, but we have just created blended space. So let's drag and drop it. If you don't see the asset browser, you can go Window and find asset browser. Here, yeah, here this, so just check this and you'll see it. So this is the blend space and it has speed, but the name doesn't mean anything. I could have named it 123 and we'll see this name. But I called it speed. So we have speed. But to really determine this property, we need a variable. And as you remember, we have created the skied variable here in this event graph. So let's drag and drop it like this. Get speed. Now we held the speed, It's float. That means that it's number with decimal and just connected like this. Now we have real speed. And even if you call this thing inside blends pays 123 or anything else, it doesn't matter just because we need the speed here. Okay, so I'm going to connect the post to the result. Perfect. So let's compile and save. And now for jump, as I mentioned, the jump will be very basic and it's actually just fall, not the jump. This fall a loop animation. We just connected like this. And now we need to work with this transitions. So first is from idle to jump. And in this case we're going to use an air Boolean. Boolean variable. What it says, it says yes or no, true or false in air. Yes, if yes, then we're going to see the falling animation. So I'm just connecting these two nodes together like this. Compile. Then let's go back and select the next transition from jump to idle. And again, we're going to use the same variable, but in this case we need falls, right? In air falls. Now, it's not in the ear. Go here and find not. You're going to see NOT Boolean. It doesn't mean that it's not a Boolean. It means that it's not for Boolean variable. We're going to connect it like this. Let's compile save. You can see that when you're in the process, you can see a lot of errors made when you're done all this gun. 8. 2.1.7 Change Mannequin: And now it's time to change the mannequin to our character. How to do it? We need to go to the content rover. Again, find the third person folder, blueprints, and find this blueprint. Okay, we'll go to the viewport and you can see the mannequin. You can see the mannequin here. And what we need to do, we just need to switch it, select the mesh here. And then if you go to this tab, you can choose our character mesh. Okay, very good. But it does the T-pose. That's because we need to choose Animation class. Let's select this one, AVP character. Okay, Nice. Now is doing the idle pose. Okay, perfect. Let's compile, Let's save, and let's go to the game. So I'm going to click here to go back to the map and then just click play. Okay, so first of all, here's the character. Very good, very good. So I'm going to click. Now. We can see it's running. First, walking than running this, and then go back to his idol position. Now let's see, let's see what happens if we jump. Joan might say it's not a jump, but it's pretty good. Of course it's not. The best jump is just falling animation. And if we do like this, like fall from a surface, we will see the same animation like this, but still good. Let's now add a real gem. 9. 2.2.1 Jump Structure: In order to understand how a jump works, let's take a look at the mannequins animation because it's the character that we already have inside this project. So we can take a look first. So I'm going to open this folder, go to this many folder, and then let me open this up. We have several animations here. What we are interested in is this jump, then fall and then land. Double-click to open. This is the first part of the jump. You can see that the character is starting his movements up and it ends in the higher position. Then let's up on the full loop. So this is the full loop animation. And what it is, it's falling or when the character is in air and has not fallen his just in the highest point and he's kinda stuck at this point. In case of jump, we will see it for a second, or maybe even less. And in case of falling, we can see this animation for a long time and then loop. Just imagine that the character is falling. This is the second part of the jump. And finally, the third part is lending. And it's very simple. It's just landing. Character touches the ground and is doing something sun-like squad, bend in his legs and arms. Now we can understand that jump consists of three parts. When the jump stars than falling and then landing. With this knowledge, we can go back to the website where we have downloaded the idle walk and run animations before. To download new jump animation. Let's do it. 10. 2.2.2. Download Animations: So we're going to find something that looks like the jumps on the mannequin inside Unreal Engine. Because if you just type jump, you can see that there is a lot of different jumps, but most of them doesn't work. Let's reload this page. Sometimes it happens. So yeah, you can see that most of these are complete jumps. And I'm going to show you what to do this animation in a sec. But for this class, I would like to find animations that are simple parts of jump. First I'm going to tab jump, jumping up. And I have already found this animation. I know it looks creepy, but it's not because it's just, it has just seven frames. That's why it looks so strange, but actually you can see it's just the first part of the jump. So I'm going to download this again, download. We don't need the skin. So without skin. So click download to download. Then our next animation is falling. I've already found good one, this one, falling idle. You can see that is just fallen Idle. No big moves. Kinda saying that we have just seen inside Unreal Engine for the mannequin. So again, download without skin, download. And finally, blending. We have several landings here. And I think I like this one. Yeah, I think that's this one. The only problem is that he is falling. We don't need that. We need just the land in part. So here we can adjust this animation. We can trim. You can see that it has 64 total frames. And if you adjust it like this, you trim the animation. You can see that it goes to his idol positioning the end. And we don't need that thing like that. If it, if it's too long. We will have problem with this animation. So I don't want it to be too long. And you understand that after a character does this, he goes into his idol position. And from idle to walk or run, it should look like it's logical for him to go to his idol position after that. And it looks like this. Yeah, I think this is fine. Yeah. But again, if we need to adjust it, we will. Now want to show you how you can use other animations. E.g. let's go back to jump and choose something like like this jump. This jump animation is just one animation, but we need to divide it into three parts. Why? Because we need logic, right? We can't control animation inside animation. So we need to divide it. And we can do that. Again, this trim here. You can adjust it like this, e.g. to find jumpstart. Then you need to find and then you download it. Then you need to find loop. It's usually just one tooth Graeme. And then the end of the jump. It can be tricky. It can be tricky. Not every animation can work. For the purposes of this class, we will use the animation that we have just downloaded. But for future games you can play with it. You can find an animation you like and try to divide it into parts using this trim function. 11. 2.2.3 Import and Logic Unreal Engine 5: Let's create the real jump for Philip. Okay, so I'm going to create a new folder and call it jump just because it's new class so that we know what we're using. So I'm going to drag and drop our animations. Don't forget to choose the character skeleton here in parts. All alright, now we can open each of this animation and take a look. All right, pretty good. We can click Save all to save this animations. Okay, very good. Now we need to go back to our Animation Blueprint. Let's go back to the state machine level. So you remember that we have created this idle walk, run stayed and jump state. So we don't need this anymore. So I'm just going to select this and delete it just like this. Okay, and now let's put the new animations here. So first is jumping up, then idle, and then lending. Okay? So here's the logic. We go from this state to jumping up. Come on, go from this state to jumping up. Then from this state to fall in idle. And then from this state to landing. And of course from land and we need to go back to idle, walk run. You can see that now we have four transitions and we'll be set in this transitions using the variables that we have created in the last class. You remember that we have in air variable, which is Boolean, and speed, which is flawed. Just to remind you, we did it in the event graph here. And before we go to transitions, Let's open each of this state and take a look. If you open it, you can see that we have this animation connected with output animation pose, and that's correct. If you click here, you can go to the details box and see some details. The most important detail for us now is this loop animation. So basically, we don't need JumpStart and landing to be a looping animation. We just need the following part to be in a loop. I'm going to uncheck this box, then go back, then up and lending. And again select this go to loop and check. Go back. And just to check, we go to falling and we see that it is still in a loop. So as you can see, all animations have, have this loop animation checkbox checked. By default. You also can create states by right-clicking here and add state. In this case, you can name the state, e.g. shoot. Then when you open this state, it will be empty. We will see only the output animation pose. So you create new state like this. Right-click and add state. Then you need to open this up and take one of your animations, drag and drop it here and connect. We don't need it now, so I am not doing that. And I'm going to delete this. And of course you can rename. This stays just right-click Rename and type and name that you want. 12. 2.2.4 Animation Transition for Jump: Alright, now it's done for transitions. This is the most important part because here we're managing this animation and we are telling when every animation starts and when it finishes. So go back to the first transition. For this one is pretty simple. We're gonna, we're gonna start the jump animation, which is jumping up when the character is in air. And you can say, that's not true because when character is already in the air, it's already a joke, but it's not jumping start. We expect a character to do the squat on a surface first and then go up. But basically we will not see it. He's feed will not be touching the ground like 40.000 s. And in this time already There's jumping up. Animation will start. For you. For a player. It will look like the character. The character is doing the squat or starting his jump on a surface. When in reality, he will start it only when he is in the air. I'm gonna get this variable and just connect it like this. Go back. Now from jumping up to falling. When our character jumps, we see the jumping up animation just once, right? We unchecked the loop. And it would be strange if we saw this animation second time or third time, right? So we'd see this animation only once. And right after that. We want to see this second animation. We just fallen Idol. What it means. It means that when the jumping up animation and the fallen idle animation starts, and we can do it with time remaining node. So we have time remaining, this one and we have ratio. We need this one because you can see the first one. Get the time in seconds. And it can be tricky to know how long the animation is. If we change the animation, it will ruin all the logic here. Instead, we're going to use ratio. Here. We can set e.g. half of all time or quarter. So we're going to select this. So it returns time as a fraction of the length of an animation. We want it to be something really, really small. And for this one, we're going to choose less node and then put something really small, e.g. 0.01 and connect it like this. So now when it's only 0.01 remains, this transition can be entered and this fall in idle animation will play. Let's go back. Then we have from falling to lending. This is the simple one. We want to see landing on a surface, right? So we can again use this in air variable, get it. And using the NOT Boolean node, you already know. We're going to connect it with the transition result. The final transition that we have is from lending to idle walk run. You can imagine the character is in air. We see the jumping up animation. Then it stops, and then we see the fall in idle animation. Character. His mesh touches the ground. We see the land in animation. So after that, we want to see idle again. Right after that. So, yeah, Again, we're going to use time or to be precise time remaining node to define this transition. So again, time remaining ratio. This same thing. Alright, let's go back, save and compile. 13. 2.2.5 Testing and Adjusting Animation Unreal Engine 5: Now it's time to test. So let's go back to this map. Click Play. So we didn't touch. I don't walk and run. It still works good. What about jump high? Not that bad, but you can see the problem. The landing, a landing is too long. And as a result, you can see that the character keeps, keep doing the land in animation. And then though, we need to see the idle animation, we're going to fix that. X. How are we going to fix that? Let's go back to Animation Blueprint and open the landing animation because lending, because we have some problems here. We have details box here where we can adjust animation. Let's find Play rate. You can read the play rate multiplier. It also can be negative, which will cause the animation to play in the reverse. Actually, this can be really helpful. Nothing this case though. So what I'm gonna do, I'm going to set ten instead of one. Okay, lets save, compile and check. And test again. Much better. Or maybe tennis too big. Let's put five. Depending on your situation and your animation. You can find that you don't need to correct this play rate, or you must need to adjust it to even bigger number. And it's not only for landing, it's actually for every animation that we have. I also want to show you another effects that you might find useful. That your animations kinda off. E.g. it's maybe it's too long in some parts. What it can do, you can go to Content, draw our and find this animation files. Open them. E.g. the lending. And you may decide that you actually don't need it to be that long, that you actually just needed to be like this. You can see it's the same as the trim settings for the website that we used. We can do the same thing here, just trim the animation. So e.g. you decided that to need just 17 frames instead of 23. So you do like this. Then right-click, and then you can choose either remove frame 0-18. In this case, you just remove everything here from the beginning and just leave this or you can choose to remove this side from frame to frame 25. Sometimes the number of the frame, it's not, it's not showing what you actually want. So you need to adjust this like this. Let's find the first of the seven. And again, remove frame zero to frame 17, or remove frame 18 to frame 25. Depending on what you need. The animation will be trimmed. So you can do that instead of going back to the website and trim there. Again, download Lola. It's kinda long so you can do it inside Unreal Engine, which is great. And I also wanted to show you another thing that you can adjust. If you go to Character Blueprint. Let's go to this third person blueprints. Here it is. Here in the blueprint. You can adjust character movement if you select this character movements component. So there were a lot of different settings, but I just wanted to show you one. So here we have jumping and we have a jump z velocity. You understand that z means jumping axis that goes to the sky. So let's, let's change this number and just take a look. So e.g. I'm going to put 2000 compile, save, play. And let's play jump. You can see it's much higher. I would say it's too high. So by adjusting this number, you can get different results. 14. 2.2.6 Press Key to See Animation: As a bonus, I want to show you how you can integrate other animations to your game. So we go back to this website and let's find something interesting like dance. You can choose any dense that she alike. I like this one. We downloaded without skin. And now we're going back to the project, go back to content browser and find all our animations. I'm going to drag and drop this file here. Select the skeleton. Okay? The longer the animation, the longer it takes to import it. So be patient. So all done. Here. We can open it and say kilo, yeah, there is a lot of frames. Look at that. Okay? So let's say you want this animation to play when player push a button, let's choose a button for this one, e.g. let's say x. So what we want, what we want to do, we want this animation to want to see this animation if we push x. So to do that, we actually don't need this animation graph anymore. Instead, we will do, we will be doing that inside blueprint of the character. You remember that inside of the blueprint we have Event Graph as well. We have a lot of different nodes here, and we can add another one. So if you want some animation to start, when some button is pressed, this is what you need to do. First, let's right-click and type key. Then find the key that you want to use. I said x. So let's find x. Okay? Now we have x and it has pressed and released outputs. So from here, what we want to do, we want to see this animation, right? Well, actually, in this case, we will need to use not the animation itself, but a montage. And actually you can use animation montage to combine several animation sequences into a single asset and control playback with blueprints. As you can see here in this example, we have different animations and we kinda control them with this montage. Montage is right. But in this case, we're going to use, we're not going to be doing something crazy. We already have a good animation. So what do we need to do? We just need to find Mon, dash, hello montage, this one, this node. And for the Mesh Component we're going to drag and drop the character match connected like this. Okay, very good. So now we need some montage to play, but we didn't create one. So let's go back to content browser and find our dance Animation right-click Create Animation montage. Because you can see it's animation sequence. And now we have animation montage. I would say that's an extra step and it will be great if Unreal Engine understands that. Instead of montage, we just want this animation sequence to be played, but it is what it is. So in this case, we need this play montages. So now we can have this montage here. We have only one cell. The choice is very simple. Okay, very good. Now save compile. Let's check. Here is that way Philip character. And then I press X. And nothing happens. Of course, because we forgot one thing, one little thing. Although we did this inside blueprint with steel, we are messing up with animation. That's why we need to go back to Animation Graph to the state machine and go to, go one step to the back. Here, we need to add default slot. Let me show you slot, default slot, Just like that. So you can see that this slot plays animation from code using animation montage. And that's what we did. We did montage and we need to added this default slot to this scheme. So let's compile and save. Now. We'll try this again. Okay? So this is the character x, you, okay? All right, all right. Very good. You can see how it works. So the animation starts when you press the button and ends when it ends. If you need something shorter, you can find shorter animation or you can trim this animation as you like. 15. 3.1.1 Download a Coin: Our first step here is to download and material that we're going to use for our coin. So you can find it anywhere on the web. There are a lot of free websites. I personally like turbo squid. Also there are Sketchfab and other resources where we can find a lot of good 3D models and materials. So I'm going to type coin. Here. You can see a lot of different coins. So we're going to need just the free ones. And then find a coin that we like. I have already checked all this and I find this coin, which I like, It's kinda pirate coin. It looks good. So I have downloaded it. You can do the same, or it can choose any color that you like. Once you select that, you need to download all the files, we're gonna use this FBX file because this format works pretty well. But I think that other formulas would work too, like OBJ e.g. let's download this and open Unreal Engine. 16. 3.1.2 Coin - Project Setup : What we're gonna do, we're gonna create a new level. Does just how I want to do it. And I don't say that it's necessary. Okay, so I'm going to select just the basic level. So now we have this basic level. And if we click Play, you can see that Philip falls from the sky. And this is not how we want it. We want him to start somewhere. So we need to add starting point. We're going to click here, then go to the Basic and player start. You can see that the capsule overlaps the ground and it doesn't look good. And it says bedside, That's because your character can be rendered with his legs under the earth. That's why we have this bad size thing. So we're going to do, which is going to move it up a bit. Just like this, but more. Okay, Now let's see. Perfect, no falling. Very good. Let's go further. 17. 3.1.3 Coin - Creating Blueprint: Now it's time to add the coins. How we do it? Of course, the coins that we're going to add our blueprints, because there are a lot of different logic inside it. It's not just a mash, it's not just physical shape. It's more. So that's why we're gonna go to the Content Browser. We're going to create a folder. I think. I want to create a folder somewhere here inside the content, but it's up to you. I'm going to rename it to objects. And then inside objects, I'm going to create coins folder to create a blueprint. How we do it? Right-click Blueprint class. For this one, the actor class is what we're looking for because an actor is an object that can be placed or spawned in the world. And that's what you are looking for. Let's rename it to BP. And open this up. I'm going to drag and drop like this to have it here next to the other tabs. So you already know how it looks. So we have the viewport, width, its physical shape, and all the collisions. We have even graph where we do basically all the coding and scripting. And we have Construction Script, which we don't use much because of its specific. So we're going to use Event, Graph and viewport. And first thing first, Let's create the coin cell. If you click Add, you can see that we have a lot of different things here. But if you think of a coin and if you think of basic shapes that we have, I will say that the closest shape to the coin is cylinder. So let's type cylinder. And it creates a cylinder for us. A small thing. When you click it, when you click Add, you can see the search bar right here. And to find a component, you're going to type here. But if you want to use this search bar, that means that you are searching through the components that you already have here. Okay? So we have this cylinder. Of course it doesn't look like a coin. Now, what? Let's fix that. Then you can use this lock to lock all this. And now when I'm changing one, you see that everything is changing like this. Okay. So I'm not sure if it looks good or not. Let's make it a bit bigger. Like this. Okay? So now if you click save, compile and then go to level, actually of course nothing happens because we need to put this coin to the world. So how we do it, we go to, let's open the content over here and find the, find the folder with the BP. Drag and drop it like this. Move it a bit. It's actually laying down like this. So let's start the game. Yeah, that's not, that's not how coins look like. So we're gonna go back to the blueprint and rotate it. Just a reminder, you can rotate your objects here. You can rotate it also here. Just select this and use this things to rotate like this. E.g. I. Need 90 here, just 90 degrees. Okay, now let's save compile. And once again, much better, much better. I would say it's too, it's too close to the earth. So I'm going to put it a bit higher. And now play again. Maybe even higher. Who may be a bit down? I can do it all day long. Yeah. Like this. Okay. I think yeah, I think that's that's what I want to do. Okay. Okay, Fine. Now let's go back to this. And now let's add a routine and movement to that just to make it look more like a coin that you want to collect. So actually, there are a few ways to do that. But here, let's just click Add again and find rotating movement. Okay? Alright, very good, Very simple. Now you can rename it. I will not. So you're going to select this and then go to your details here. And here you can adjust everything. E.g. rotation rate can be changed and much more. So let's save, compile this one. Go back and let's take a look. Beautiful. Now it's rotating. Perfect. So if you want to change this rotation, let's say, let's tie line AT for this, for y. And then if we click save, compile and go back, you can see that we have this odd rotation I will say doesn't look good to me, but I think you'll get the idea. So you can play with this settings. One thing that I want to do is I want to go to this movement components and check this box update only if render it. This means that this rotation thing will be updating only if the coin is rendered. So when the player is away from it, the rotating will not take place. We don't need it because we don't see it. But it helps with resources of computer because it's not endless and you need to think about it when you are creating your game. So we're going to check this box for this 1.1 less step. Before we go further, we're going to save this because I still see this untitled thing here. So we're going to save all. And I'm gonna give this a name. We're going to go to the maps folder and you can give it any name. I'm going to give it a name. Coins. Coins. 18. 3.1.4 Collision and Logic : Now it's time for some logic. We know that collect coins. But what is collecting coins? But what is that? First, it's checking if character touches the coin. Calculating how many coins he has touched. It's his place cord. And making the coin disappear or destroying the coin. So let's do the first part. We need to check if character touches the coin. And as you already know, we're gonna do it with the collusion. So let's add a collision for this one. I'm going to add a sphere collision, but you can actually use capsule collision as well. So here's the collision. We can make it a bit bigger. We have the log logged in. Now, when I change the size, you can see that all three numbers are being changed. Just like this. Maybe even more. Okay, Let's save, come pile. And oh, we didn't do one little small thing. So we have created this collision for the cylinder, right? So let's drag and drop it like this. And now the collision is connected to the cylinder. Hi, I just wanted to make sure that it is centered. It is. Okay, very good. So save, compile and now go to the level. Let's see. Actually don't need the game. I just need to see this collision box. Just want to make sure that it is okay. Maybe, maybe let's make it a bit more bigger. Don't forget to select what you want to change. So if you are working with collision, select collision, if you are working with cylinder, select cylinder. So let's make it bigger, bigger. Maybe like this. And now I think it's okay. But if not, we're going to change it. So let's add a few more coins first. Okay, so what I'm gonna do, I'm gonna open the content, draw over again and drag and drop a few more coins. You can see it can be hard to actually put them in one level. So instead of dragging and dropping, select this one, copy, paste. This pieced, like this, and like this. So now we have four coins. Let's take a look. Great, great, great, great. So we know that they have collision, but we didn't add any logic. That's why nothing happens. 19. 3.1.5 BP for Collectables: So let's go back to the blueprint slug the sphere component, and right-click on it. At event, we have event on component begin overlap. And that's what we need, right? When you click here, you can see that it sends you to the Event Graph and creates this node on component begin overlap, which is an event. This node helps us to catch this moment when something overlaps, soften, right? In our case, that will be Philip, which is our character. So let's use the node that we already know. It. It's called cast to BP. This node tries to access object as a blueprint class. It may be an instance of. So we're going to connect these two together just like this. So if they overlap, so something happens. And to calculate that something, we need to add a variable. We're gonna do it in the blueprint for the character. So let's go to the Blueprints folder. Mine this blueprint. If you didn't change mannequin to fill up, then you're going to see mannequin here. We just fine. Don't worry about that. So we go to the Event Graph, and now we're going to go to this variables here and click plus and add a new variable. I'm going to call it how many coins? I need this variable to calculate how many coins my character has collected cell. Instead of boolean, we're going to choose this type, which is, which is integer number. That means numbers like 123, etcetera, whole numbers. So integer. Now we're going to go back to the blueprint for the coin, and we're gonna select this, and we're going to connect this one with this variable that we have just created. We need to get this variable. So I'm going to type get first and then the name of the variable, you remember that I called it how many coins? Here it is. If you gave it any other name, then you're going to find the name that you gave. So here it is. How many coins? And then from here, what happens? So each time the character overlaps, the coins collision, that means he collects the coin. Each of this overlapping means plus one coin. So first we help zerocoins, then one coin than two coins than three coins and so on. Since every time he overlaps, that means plus one, we gonna do like this. We're going to type plus plus and developing in many, many programming languages, plus, plus means plus one y. So that's because this kind of math is being used so often, like, really, really often that code creators, like the language is creators, they decided that we're going to have a small comment for this. So plus loss means plus one. Okay? So Enter. And now we have plus one. So I'm going to connect it together like this. So now we have this variable changing, but we want to check that because we don't know. Does it, Does it work like this or not? In order to check that we can use print string node. As you remember, this node is used for development purposes only. So you don't want to use this node for your game. It's only for you to see if everything works for debugging and stuff. Okay, so let's open this up like this. So what we're gonna do, we're gonna print this variable on the screen, and it's a string and integer. And this is totally fine because we can do like this. And it's going to add this node, which is transform integer into a string. One less step is to connect these two like this. Now save compile. So we have the error because we didn't save this one. So let's save this first. So I'm gonna go back to the characters save compile. And now save compile. Okay, Very good, very good. Remember, which is not saved, doesn't count. So we're going to go to the game again play. And let's see. What do we have? Oh, yeah, I see it. I said Have you seen that? Let's let's do it again. Okay. So look here, it's gonna be something here. 12354. That's very fast. It's going away fast. So let me do a few things here. I just want to change the text color to red so that we can see it clearly. And then, oh, I didn't change that. I want to change that to red click. Okay. And then duration, I'm going to put 5 s enter, okay? Once again. Okay. So now 123. Why? Because here is overlapping all these collisions you can see. Of course, that doesn't make sense. So now we see how many times character overlaps the coins, but the coins don't disappear. So we see the play score growing and growing. That doesn't make sense, that doesn't make any sense. And to destroy the coins, we need to destroy the coins. So we're gonna go back to Blueprint and find Destroy Actor. Here you go. Connect those target itself because it's for the actor itself, which is the coin. So now let's say compile and take a look once again. Now we're going to see that the coins disappear. Very good, very good. 20. 3.1.6 Change the look of a collectable: So we did a good job right? Now when we click Play, we see the coins. Then you can see the left corner that there were two, now it's three. And for our next step is to change the material for the cylinder because obviously we don't want our coin to look like this. Right? So I'm going to go to the Content Browser and find the coins folder. And right here I want to drag and drop the coin that we have downloaded in the very beginning. In part, all. It doesn't matter. So what we have here, we have a static mesh and texture and material. Very good. So we're going to save this. Now let's go back to the coin blueprint and then go to the cylinder. In here. We're going to find this. We have static, static mash and we have materials. Now, if we change the static mesh here, we're going to lose the shape that we did. Because it's going to change this mesh to something else. It's gonna be different size. But what are we going to do instead? We're going to just go to this materials tab. And instead of this basic shape material, we're going to find the material for the coin. So let's go back and find how it is called. It is called material to okay. That's what I wanted to find here. Material too. Okay, great. That's great. So we can see that we just put a material on it but didn't change the mesh. The only thing that we need to do now is to rotate it. So instead of let me see. So we're going to put into degrees here just like this. Okay, so I'm gonna save, compile and go back. Play. For fact, it's good. It looks much better. Now we have this pirate coins. Very good. 21. 3.1.7 UI Display the Score: So we have the coins, we have the coins destroyed. When the hero overlaps them. We also can see the count. But this count right now, it's for development purposes. I told you that we can use this print string node for the game because it doesn't look like something that you want to say in a game, right? You just don't want to play a game and see this red numbers without know, it doesn't look good. It doesn't look good. So instead, we're going to create a user interface thing, which is called widget. User interface is also called UI user interface. To create this, we're gonna go back to the coins folder, then user interface, and then find this Widget Blueprint. So I'm going to rename it. It's WPP for Widget Blueprint, coins. Alright, let's open this up. It is empty, of course, because it is new. So this is the place where you create your user interface, where you create your widgets and drink going to do that. So we're going to start with adding a Canvas because Canvas is just a place where we will be doing something. So we're going to use this search bar type Canvas right here. Drag and drop it. And do like this. Now we have this canvas. Well, what I want to add to this widget is very simple thing. I want coins and I want the number of the coins. So I'm going to type horizontal box because I want the text to be inside this horizontal box. And first I'm going to select this box. And if you see, when you select something here, you can see all the details from the right side and you can change something here. I want to have it actually from this side instead. So first let's anchor it to the right side so that this widget is anchored to the right side of the screen. Doesn't matter the size or radio for screen, it's always there. So for the horizontal box, I'm going to change their position. I'm just going to drag and drop it like this. You also can zoom in and out. And you can drag and drop. You can draw budget. You can drag it like this to change its position. Let's move it a bit to the side. Okay, maybe like this. And now, as I mentioned, I want a text text drag-and-drop to the box. And now it's going to be inside the horizontal box. So what we can do, we can, we can select the text and type something here. Actually, before we do that, let's select the horizontal box and make it a bit bigger, like this. Or what you can do, you can click Size to content. And it's gonna be the size of the contents inside, which is the text. Now select the text and here is where you can edit the text. So I'm going to type coins. Enter. And now we have coins. Perfect. So this element of UI is going to have two elements. The first is the text coins and the second is the number of the coins. So we can't do it inside one textbox because first is just text and the second part needs some logic. So what I'm gonna do, I'm going to right-click, duplicate it. We need to rename it. Number four, coins. It's fine. Here. Instead of coins, e.g. we can just type zero just to, you know, to take a look how it works. I can see that zero is to close two coins. And in order to fix that, we need to find margin. So you can type margin here. Okay, great. So here's the margin. You can open this. And then we need the margin from the left. So type ten. Okay, and now it looks better. So now we're going to save compile. So once you have created and laid out your Widget Blueprint, in order for it to be displayed in your game. You will call it by using a few nodes. Let's do that. We're gonna go back to the Character Blueprint. And here we need to start with an event, right? So when we want to see the coins and the number of the coins, we want to see it when the game starts, right? So I'm going to tie prevent, begin play, begin, all, begin. Yeah, here it is. Even begin play. And so for widgets, we always use these two. First is create widget. So I'm just going to type create widget here. This is the second one is Add to Viewport. The connection of these two nodes helps us to actually see the widget in the game. So we need to do just a few more things here. First, for the node, we need to select the this class. This is the widget that we have created. And then we need to connect these two together, just like this. Safe compile. Now let's take a look. Okay, very good. You can see these coins. Zero. Perfect. So if you don't like it and you can change colors, you can do many different things. And I probably will be having another class about widgets. But for now, just basic things. Again, if we go to the game, the character is going to collect the coins. But we didn't see anything. We didn't see any player's score. We just see the zero because it's just text, just text. So there is no logic inside it. But we're going to create it. 22. 3.1.8 Binding in Widget: In order to create logic, we're going to need to go back to the widget and select this zero here. So if we go to the text, we just put zero to take a look how, you know, how it all looks and stuff. But we actually have this bind function here. And that's what we need. Actually the ability to bind properties of your widgets to functions or properties. One of the most useful aspects here by binding a property to a function or property variable in your blueprint. Anytime that function is called or properties updated, it will be reflected in the widget. So how we do that? We're going to go here, click mind and create finding. Here it is. As you can see, we moved to the graph. So if you want to go back, just click here and you will come back to this canvas and your text. So go back to graph. Now we have the target and we actually need to, we don't need this connection. So you're going to push out and then click here like this. So I'm going to connect the variable that we have created. You can remember, we have created this. How many coins variable to this text. First, we need to cast to the character, once again, to VP character for the object, we need to get player character. Okay? And now we can get this variable. So we're going to do like this and then get how many coins? Here it is. Just the way we did before. So we have this variable and we're going to connect it like this. And of course you can see that if you do like this, you will get this new node which is convert this integer to this text value. Okay? Don't forget to connect these two together, just like this. Save, compile. And let's go back to the game coin. So 01234, very good. So lets, you know what? Let's add a few more coins. So to do that, let's select them all copy and then paste and move them like this. Now we have eight coins set 12345678, that it's perfect. The other thing that we have left is this print stream. You can see on the left side of the screen, but still held this numbers. And we don't need them anymore. Let's go back and where we did that. We did that here. We still need this logic. We just need to get rid of this print string node. So I'm gonna do like this and like this. And I also didn't need this one. So what we need to do, we need to connect it like this. Because of course we want to destroy the coin after that Safechem file. And let's see if we did everything right. 12345678 and no text in the left side of the screen. Perfect. Very good. So this is how you work with collectibles. This is how you create your Logic or coins and other objects that two-character can collect. 23. 3.2.1 Platform - Download Model: So since we want to add platform store game, we need Platforms obviously. So I'm going to use Sketchfab website for this one. You can find a lot of different models on this website. The best thing is some of these models are free. Just like this. Just like this model. You can take this one. I'm going to show you the name. It's frowned platform. Just to follow my steps. Or you can simply search for platform, check downloadable, then take a look what they have. E.g. this is the platform that I'm going to use. If you scroll down, you can find this download 3D model. Or you also can choose other models like this one. So when you, when you click download, it shows you different formats. And the one, the first one, FBX, is what you want. If you just click Download and we don't need the other formats. Also, if you're using something for your game, always make sure to check the licensing information. E.g. in this case, we can use it for commercial use, but we need to credit the author of the model. Now let's go back to Unreal Engine. As you can see, I'm going to use the project that we've created, four coins tutorial. So basically it's just a new level with a few coins on it. We don't need the coins for this class, but I just want to keep everything in one place. So that's why I'm going to use this level and I'm gonna work here. But again, it's up to you. You can just create a new level and start to work in there. 24. 3.2.2 Import and Prototyping: Now let's go ahead and import the round platform. So I'm going to Content Browser. We already have these coins folder here. Or if it's the new project that you create it, you won't have any folders and you're going to create a new folder. I have created this folder objects, and I'm going to create another folder inside it. This time is going to be platforms. I'm going to drag and drop my platform right here. When you download the file, it will be a zip file, which you need to unzip first. And then you can drag and drop this folder right here. So this is the window that will appear. Just click input, all. This is okay. Just click Clear. That is fine. So what do we have? We have the static mesh, which is the round platform model itself. We also have a texture and normal map. The other one is material. So depending on the model that you're using, you may get different kinds of files. Since the files that you're going to be using are free, they're not always perfect. So sometimes the file that you download will not work for your project, which is fine because it's free content and you can't expect much. So if in any case you see that something is wrong, just change it to another model. But this one, this works pretty fine. So we won't talk about textures much in this lesson, but just to remind you or to guide you through this, we have texture and we have normal map. What normal map is its texture with bumps and dense. So e.g. if you want your model to have physical bumps, physical dense, if you want some parts of it to be higher than others than normal map is what you need. Basically all 3D models have normal maps. Okay, So we have imported it. Let's click Save and Save Selected. Now let's go back to that screen. Before we go to this beautiful round platform, I want to show you just basic things that you can do when prototyping your game. So as you know, you can quickly add something with this button and it will have shapes down here. So we have some basic shapes. And e.g. we can take plane and this plane is basically a platform. E.g. That's okay. I'm gonna just put it a bit closer to the game starts and click Play. So here it is. My character can jump on it. Yeah, so that's the platform. When you are prototyping, you might need to change the size of the platform so you go to scale right here. I'm going to click this log to change all three axes at the same time. And e.g. I'm going to put something like like this. And you can see now the platform is bigger. So click Play again and take a look. Just like this. That's how you do it. You can copy and paste a few platforms and prototyping your game just like this. You can see that now they are too close to each other, so you might want to put them a bit apart. E.g. like this. So that's why you might need these basic shapes for a game. 25. 3.2.3 Basic Platform BP: But let's delete those platforms and create something beautiful. And to do that, what we need to do, we need to do it through a blueprint. So let's click here, create new blueprint class. For platforms. We're going to use actor because an actor as an object that can be placed or spawned in the world, that's what we need. I'm gonna go to the Blueprints folder and create a blueprint that with a name. Basic lead form, no spaces. Okay, I'm going to drag and drop this tab right here. So you already know how it works. This is the viewport and we're going to create the platform here. So first, let's add a static mesh. Because that's what it is. It's static mesh. You see this brick picture here. So aesthetic mesh with some textures on it or with materials on it. And maybe with some logic inside, or maybe without, it's up to you. So for now, this Static Mesh is empty but still, it is still something actually, what I'm gonna do, I'm gonna go to the static mesh with a static mesh options here. In this list of all the matches that we have in our project, I'm going to find this round platform static mesh. You can see here we have Static Mesh. Yeah, that's how you can understand that you can use this for your static mesh. I can see it right here, but you also can search for it. Okay? So now this is, this is inside. If you can't really see it, That's because it is small. The model that we have downloaded is very small, so I actually want to scale it up to 50. Yeah, just like this. Now it has good. So just to check, Let's save, compile and go to the game screen. Then open the content, draw where and drag and drop this platform. So let's click play and just take a look. If we like the size of the platform. Yeah, that's a good size. So let's go back to the blueprint. So now we just have this Static Mesh with nothing on it. It doesn't have any material. And you can see that for materials we have this one because this one polygon shader, It's not that we want for the platform, right? So let's open this up. And here we have material graph for the object. So what we have here, we have a few inputs and we need to connect what we have here with this inputs. But we can connect materials like this. And if you go back to content browser, you can see that this one is material. Although those are textures, what you can do, you can right-click Create Material. And now you have the material from this texture. You can do the same for the normal map create material. I'm not going to change the names. But if you want, you can do that. Let's save. And now if you go back to your model and go to materials, can actually search for this material which is ground, this one, but it's just texture. Let's add normal maps. So we have this normal thing here. Let's find textures sample. Okay, now for this texture sample, we're going to select the texture here in this tab. So go and find round, normal texture, okay, here it is. If you select this texture and go here you can see the texture is already selected. So for new one, all you need to do is to apply the texture that you want to use to this texture and sample. Okay, so let's save this one. Perfect. Let's go back and save the basic platform. And let's go back to the level. I'm going to put this platform a bit higher. Let's check this out. Perfect, Very good. So what we can do, we can add, let me do like this. So what we can do, we can copy this platform a few times and pasted like this. And now click play. And that makes our platformer look more like a platformer. Oh, yeah, I made them. That's that's too close. That's too close. Let me do like this and like this. Okay. Ligon. Yeah. Very good. 26. 3.2.4 Jumping Platform BP: But just basic platforms are not enough, right? So what I want to do here, I want to create a platform that works like trampling. So I'm going to call it a jumping platform. But you understand the idea. I want the player to jump on it and the platform makes him jump again, like trampoline told you. So let's do this. That involves some logic, right? And so to do that, we're going to need another blueprint. We already have this basic platform blueprint. So what we can do, I'm going to close this tab. We don't need this one. We're going to go to the content, draw our find this blueprint and copy, paste and rename it to jumping jam being flat form. Alright, so let's open this up and calls the basic platform. Since I'm happy with the look of the platform, I don't need to change anything here. So let's talk a bit about the logic of the Champion platform. What it does. It works like this. When the character is taps on the platform, Lab four makes him jump, right? But what does this mean? This means that this platform actually changes velocity of the character. And if you take a look here, or even here on the game screen, you can see that we have three accesses. And this blue one, this axis looks up. And this is the axis that we are using when programming jumps, right? You can remember that we've been using this axis when adjusting jump animation. So this will be the same thing. We're going to use this axis and add some velocity. You will remember that velocity means speed and direction. So it's like a vector. Now let's go back to the first part. The first part was when the character steps on the platform. And how can we check that? I'm gonna give you 3 s to think 123. So the answer is collision. Of course, that's how we are checking if character is crossing an object, right? So for the static mesh, we're going to add collision. But before we do that, You may ask like, Kate, I can see that this platform already has a collision because my character actually can step on it, right? Right. So that's why this collision that is inside this Static Mesh. It's another type of collision. And this collision goes with static mesh. When you create it. You can see it. You can see it here and the details. So I'm going to search for collision. Collision, collision, collision here, Collision Presets, e.g. if you choose no collusion, that means that character cannot stand on that platform. It's gonna be like nothing for him. But this is collision preset that we have. We can use this collision preset in the logic. So in order to check if the character steps on the platform, we're going to add another collision. So let's add a collision. You remember that we have several types of collisions. Box capsules fear this case I'm going to use Box Collision. It is big. So I'm going to change this box collision. Go to scale and make this box collision smaller. Okay, now I'm going to unlock this because I'm going to need different numbers for each axis. So for the z axis, I need some light like this, like this. Then for this one, we're gonna make it bigger. And then for this one, you can change the view. You can hold Alt and change. Do you like this with your mouse? Let's try the same. Yeah, Probably like this because I think that this gray edge shouldn't work like trampling is just, is just the platform itself. Okay? Alright, pretty good. So now we have this box collision. Let's save compile. Now we can create some logic from here. You can, what you can do, you can right-click, Right-click on this box collision Ed event. And let's choose an event. So what kind of event would work in this case? Of course, this one on component begin overlap. Okay? Here it is. We are now in the Event Graph tab. This event code, when something starts to overlaps this component, e.g. a player walking into a trigger. That's exactly what we need. Now we need to connect to this with the player. We need to tell, tell it's like, hey, we want to check if player overlaps with this box, with this output. We're going to use cast to be p. And here we need to select this ThirdPersonCharacter. This is not the first time we're using this node and you already know that we use this cast node in order to check if that's the one that we need. In this case. Like is it the ThirdPersonCharacter? Is it that one? And now for the other actor, we need to connect this object together like this. So now if it is the character, then we want him to jump. But we actually have a very good function for this. Let me show you lunch character. You go. Let's read about it. It says a pending launch velocity on the character. So we have target, which is not self actually. For target, we need the character because self, in this case means the box. Let's connected like this. And now target is the character. And if you can take a look at this node, you can see that it has all three axis is here. But we actually need only this one, right? So this is not the only node that has this three accesses together. And if you need just one axis, what you need to do, you right-click and then split. While. Now we can connect this input and use just just z velocity, but first or which node we're going to need. So we're going to need the character node, which is movement, director. Movement, get character movement. Here it is. This node reads the value of variable character movement. And character movement is movement component used for movement logic in various movement modes. Walking, fallen, containing relevant settings and functions to control movement. We got it. In this movement, we need just one element, right? We need jump z velocity. And guess why? If we type jump Z velocity, we will find this node. And this node actually reads the value of jump z velocity. Jobs the velocity is initial velocity. When jumping. Got it, got it. And now we're going to multiply this because we want that. We want the platform to lift character, right? So let's put multiply, multiply, very simple operation. Just multiply. I'm going to put 1.5 and then connect it to the z axis. Just like this. Let's save, compile and go back to the game. So for now, we have this basic platforms. All three of them are basic. But I'm gonna go to the content rover and Phi this Jumpin platform. Let's move it like this. Okay, Let's click play and check how it works. So we play, whoop. It does work like a trampoline, but I think that's not enough. Maybe it's deem maybe it's there. I'm going to put it a bit higher. Check. Yeah. Good. Yeah. So probably for this one, I'm just going to need it to be a bit higher. We can actually change this number here. Let's change it to five. And it's gonna be crazy, I think, but we are experimenting, right? So let's click Play. Yeah, I told you, I told you that will be crazy. But you get the idea. I go back to 1.5. That's totally fine. So don't forget to save and compile. Otherwise we want to see the changes. So for now we have jumping platform in three basic platforms, which is, which is cool, which is cool. I will say that when you're creating your own game, it's probably a good idea to choose different models for different kinds of platforms. Because right now they look the same and it's kinda confusing for a player. But for the purposes of this class, that's okay. 27. 3.2.5 Moving Platform: If you've think that that's it. No, that's not. I want to show you how you can do moving platforms. And I think moving platforms, it's very, very basic element of any platform and game because it gives you so much variety with level design is crazy. So let's do this. Again. I'm gonna go to, I can actually see that I didn't save this level. So I'm going to click just in case, just in case. Don't forget to save from time to time. Okay, so let's go back to content, draw our a and find this two blueprint. Now we need another blueprint for the moving platform. We can create this moving platform from either of these blueprints. But since we already have collision box here, I will be using this one because we're going to need the collision, the collision for this blueprint as well. So I'm going to call it moving platform. And double-click to open. Perfect. So since we have copied the jumping platform, we still have all those nodes here. And I'm going to delete those. Go back to viewport. I just realized that we actually don't need this collision box for the moving platform. But that's okay. That's okay. Because probably in the future, if you need some kind of logic with this collision box, you will add it. So the logic behind this, this simple, we want to see this platform moving when the game starts. First of all, we can, we want to see this movement going up and down, up and down. Let's go to the Event Graph. And we're going to use this event begin play node because we want this to start when the game starts. I'm just going to delete those. How can we manage the movement of the platform? Actually, if you remember, we have timelines here and that's what we're going to use. So let's find timeline. Timeline. We can give it a name, moving platform. And so now we can open this up and actually manage the movement. So as a track at Vector Track, give it a name. Moving, moving up and down. Okay. So now we have three axis's once again, but actually we just need this Z axis, y, because z axis means movement up and down, right? So I'm just going to block these two axis. Let's save, compile. Sometimes when you click like this, you need to click the axis is again. Okay, good. So make sure that only the zed axis is unlocked. Now we have the length. It's up to you, how long you want it. I'm going to work with 3 s length. This is very simple linear movement. So we just need two points versus right here, you need to push, Shift and then click here, you have your point. So times 0.0, this is just the start. Like from what point we start, we'll start from zero-zero. Then we can add another. Actually you can just click anywhere because we're going to change it here. The second point will be in the very end of the track. That means 3 s. And you can put any value that you want. I put 200. Okay. If you can't see it, let me show you. It's right there. It's right there. Okay. Very good. Safe compile. Now let's go back to even grab. We need to define that this all happens with the platform. I still have this Static Mesh name here. I can actually rename it to round platform. Now what we need to do through the update output, we're going to put said related fluctuation node. This is it. You can see around platform right here. It's the name of our static mesh that we have just renamed. Related to location sets, the location of the component related to its parent. And you can see that the target here is our round platform. Now, through this timeline, we have created this vector track. And we need to connect this one with this new location. Obvious. This is obvious. You can see yellow, yellow. So now this new location is defined by this timeline. Let's go further. So we're going to add a delay node. Here is it is what it is. It just to delay? We're gonna put duration 3 s. It should be the same duration that we have in the timeline here. Now, let's just say this and take a look what we have. It's not finished yet. But let's just take a look. So I go to the country and draw where I put my moving platform. Right here. Click Play. And let's take a look what's happening. Uh-huh. So it is stuck. That's it. So it moved up to 200 points. And yeah, that's it. Let's take another look. That's it. We don't want it to do like this, right? We want it to go up and down. So what do we want to do? We actually want to check after this timeline is done, after this, after the platform is on its high point. We want to check if it's up. If it's up, then it should go down, right? And if it's not, then it should go up. Or we can reverse this logic in check if it's at the bottom. So if the platform is at the bottom, then it should go up. If it's not at the bottom, then it should go down. For this logic, we're going to need a variable. So I'm going to add a variable, call it bottom. This is Boolean variable, meaning true or false. Now we're going to save compile, then select this variable, go to Details and find this default value. So by default, it is false. But at the very beginning of the game, this variable is true because at the very beginning, this platform is at the bottom, right here. Okay? So if the platform is at the bottom, then we want this timeline to play. Because this timeline moves our platform 0-20. But if the platform is not at the bottom, meaning that it is at its highest point, then we want this movement to be reversed. Here we have this reverse input. So how to do that? I'm gonna show you the branch node. Here it is, this flow control. So it's very simple one, if condition is true, then it goes from the true and it's false. Then here, for the condition, we're gonna get a variable and connects like this. Now, if it is false, like it is at the very beginning of the game, we're gonna set this variable to, set this variable to true. And if it's true, we're going to set this variable to false. Now, in this case, we're going to play, in this case we're gonna reverse. Okay, Let's save compile. The platform goes up and down, up and down. Okay, so what we're doing here, we're switching this variable from true to false and from false to true. And that's switching allows us to manage the movement. We can either play, which means play the timeline 0-200. We do the reverse. So we go 200-0. Okay, so let's click Play again. So let's go to the game and click Play. And let's see if we can jump on this platform. So I'm going to move this platform a bit like this. But another try, another try. Come on. Yeah. I think it's too high. Let's see if we can jump from this platform to this one. We can. Very good. Alright, perfect. 28. 3.3.1 Enable Double Jump: We have created this level with coins and platforms. Also we have Philip, which is our character. He can jump, he can run, walk, is nice guy. But what Philip can't do, he can do double jump. You see, I put space, space, space, space, space this, no, just one jump. And in today's lesson, I'm going to show you how you can add double jump for your character. And also, we're going to create some interesting logic for this double jump. First of all, if you want your player to be able to do the double jump from the very beginning of your game. You can do it very simple. So I'm going to click, I'm going to escape this. Then go to Content draw for the blueprint of our character wears the blueprint here. Blueprint. His blueprint. You remember this is the blueprint for the character. So here we have some character movement controllers. And if we go to Details and type jump, you can see that we have a jump max, count. And what it means, it means how many jumps you can do. So let's e.g. put two here. Let's save compile and go back to the level. Now. Double jump. Although if I push spacebar three times, like if I want to do three jumps, it doesn't work. You only can do two jumps because of this number that we have put. So if you want three or I don't know why, but if you need something bigger than two, then you can put it here and your player will be able to do double jump. From the very beginning. I'm gonna go back to one. And let's create something interesting for the double jump. 29. 3.3.2 Logic: E.g. what if you don't want player to be able to do double jump from the very beginning. But instead, you want him to be able to do the double jump when he meets an object. Like, you know, sometimes in platformers, we have like this sign. So banners and one character comes closer to such a banner, he sees some kind of hint, e.g. like, hey, if you want to jump, you can use space bar to jump, or if you want to shoot, Use your right mouse button to shoot. So we can do the same for double jump, e.g. we can put a banner. And only when a player miss this banner key is able to do the double jump. We need a banner and we need some logic for this. You already know, when we need some kind of logic, we usually use blueprints. So we're gonna be using blueprints. 30. 3.3.3. Find a 3D Model: For this lesson, I'm going to use a model from Sketchfab. Again. You remember that Sketchfab is one of the websites where you can find free 3D models. It's not the only one and you can choose any model that you want. But actually, I'm not using this one. I'm using this one like this tile of this banner and I think it looks pretty interesting. So I'm going to use it. But you can go ahead and download any model that you want. But if you don't want to spend a lot of time choosing the right model, you can just choose any basic shape, such as cube, cone, cylinder. You name it. If you are using Sketchfab, you need to do is click here, download 3D model, and then choose this one. Obj is a format that works with the Unreal Engine. You also can use FBX. That format works with Unreal Engine as well. 31. 3.3.4 Blueprint Double Jump - Mesh: Alright, so we have downloaded the model and now we're ready to create this new blueprint. So what I'm gonna do, I'm gonna click here and new blueprint class. Then we select Actor. And we need a name for this one, the double jump. All right, so here it is. For this blueprint, we need two things. First is the banner, and second is the logic. To add a banner or something, we need mesh, which is Static Mesh, this one. And as I mentioned, you can use any basic shape. What I'm going to do, I'm going to use the banner that I have downloaded. So I'm gonna go back to the objects folder. This is the folder where I save everything that we're using. You remember that we have coins here and we also have platforms. Yeah. So next thing will be the banner. Here it is. Let's check. We have the banner and then we have the textures. Let's save all. Alright, Very good. Now we can go back to this block prints double jump blueprint, and select the mesh here. This is a static mesh banner. Just like this. So as you can see, the, the model is very quite far away from the center, which is fine. I'm just going to move it a little bit. Select this, and then rotate it, and then okay, so now I can see this is funny thing that we can only change 1010 points. If you need something smaller, you can go here and then change it to five, e.g. and then you can move it to five K and maybe a little bit this side. Okay, I think that's fine. That's just, you know, this the test. So I think I'm fine with this. If you want, you can rename this. Now let's add a material, because right now you can see it's only the mesh and all we see is white. So now I wanna go back and create a material from this base color texture. You can see we have created this material. Now we can go back and select this material in this list. Now we open this. By the way, you can always rotate this ball to take a look at the material. Let's connect normal map to this normal input. So I'm going to take the texture sample. And then for the texture, I'm going to select the normal map. And you can see how the material has changed, e.g. if I push out and then click here, you can see the difference. Now let's connect them. We also have roughness. So let's do another texture sample, sample. And for this one, I'm going to choose the roughness again without it, with it. So you can see it makes it more smooth in this case, but depending on the model, it will give you different results. So let's save this one and go back to this blueprint. Alright, so now we have this banner with material on it. Very good. Now the next step is what I want you to answer, because yes, we need this banner and we need logic. So in order to create this logic, what one element are we missing here? What do you think? Yes, you are right? This is collision because how can we check if player is near this banner? This is the easiest and simplest way to check it. So what I'm gonna do, I'm gonna add a collision. I think the Box Collision should work just fine. Maybe it's too big. It's like this. Let's check. Going to move it a bit higher. Right? Yeah, I think there should be good. So now we have the collision and the banner, and now we're ready to create the logic. 32. 3.3.5 Blueprint Double Jump - Event Graph: Here we are on the final step. So let's create an event. And you already know this one. If you right-click on the box and add event, you can find this on component begin overlap. So what it means, it means when the player overlaps the banner or the collision of the player overlaps the collision of the banner. And to put it very simple, one player is near the banner. And the first thing here is to check if that model that overlaps the banner is the player. To check it, we use the cast to note. You already know this node. Cast to third. Oh, yeah, this one cast to this blueprint of the player or the character, of the character, of course. And for the other actor, we're going to connect it like this. So that now object is connected with this or the actor output. If the player overlaps this box, we want to, let's go back here and find this jump count. We want this jump count to be too, right? So lucky, we have Jim count. Here you go. Said Max, said jump max count. So what we're gonna do, we're gonna enter to here. And now if the character overlaps this box collision, then jump max count as two. And we forgot just one little thing here. You can see that here for this set, target itself and self in this case means, you can see this is, this is double jump blueprint, right? So the self means this banner. And we don't want to set jump count for the banner, right? We want to set it for the character connected like this. And now the jump count is set for the character. Perfect, Let's test it. Safe compile, and go back to the level. Of course we forgot to. We need to put This Blueprint first. So let's open this up. It's here. The blueprints. Double jump. I got it. I got it. You can see this problem. The banner is so little, I can barely see it. Okay, we're gonna go back to this blueprint. Make this banner bigger. Like this. Should be good. Okay, maybe it's too big now. Put it back on Earth. Okay. Let's see. Yeah, that's good. That's a good size. Okay. So I hope that I'm not too close to it. Let me go back and move this banner away from the starting. Now play again, okay? So now this is the banner. So now I can only jump once. Then let's go to the banner, going to cross it. You could see this glitch. Something happens. Yeah. Now I can do double jumps. Yea. Alright, so that's it. This is a very simple logic that you can put chit game to make the introduction part or interesting. 33. 3.4.1 Trigger Box to Restart Level: There are only two outcomes and end game, you win or you lose. And we need to program both outcomes for your game, right? So let's do it. So in order to demonstrate you how to do this, I'm going to create a new level. So we go file new level. Then we're going to create just a basic level. And here it is, Let's save it. So before we go to the win-win situation, Let's create some logic for a situation when the player loses. Because it happens, right, it's a game. So in order to do that, and for the next part as well, we need some platforms. So I'm going to open the content draw. We go to the Blueprints folder. And as you remember, we have some platforms here. Let's start with just a basic platform, just like this. And then we're going to do moving platform K. It's going to be moving like this because it's moving up and down. Then put another moving platform. I believe this one moves down and up. I'm not sure. We're gonna we're gonna take a look at it. And then just the basic platform I again, another basic platform which will be the finish of the level. Okay, so I'm going to select the floor and just click Delete to delete it. Now, the level looks more dramatic. Let's put the player starts right here on this first platform. Okay, Now let's click Play and take a look. Wrong direction. Yeah, much better. Okay, so now we have the platforms. Let's just check if everything works. If we can jump. Will okay. Okay. Got it. I got it. I got it. That was too far or I'm very bad and my own game. Just move them a bit closer. Okay. Let's try again. No. Okay. But anyway, you can see if you fall from the platforms, you just fall and fall and fall endlessly. That's not what we want to see. So we need to add some logic like what happens when a player falls. In this class, we're going to talk about triggers. And triggers and Unreal Engine are actors that are used to cause an event to occur when their interacted with by some other object. And then level. In other words, they are used to trigger events in response to some other action in the level. In our case, we want trigger to be below the platforms so that when player overlaps this trigger, something happens, right? We don't want him to fall down and down and listening. Maybe we want to just start the game over instead. So let's add a trigger. So to add a trigger, we're going to click here and type trigger. Tree gearbox. Okay? So the Trigger box is here. And as you can see it as it is right here below the platforms. And we need to change its size because we want it to cover all this zone where the player can fall. Because he can fall from this side of the platform. He can fold down here and here and there. And we want the Trigger box to be everywhere. So let's change the size of this trigger bulks. To unlock this lock first. We're going to do like this. Move it a bit. And now to the center and then make it bigger. Like this. You can change the perspective to check if the Trigger box is where you want it to be. E.g. you can go here. We have the perspective now if you click and you just tap, it's going to show you where your trigger boxes, e.g. right now. I think it's too much on this side. If you want to, you can change the size of the Trigger box just like this. Move it. Okay. Then you go to bottom. It's going to be the same, right? And then you see from the side. Okay, I think it is pretty good. Let's go back to perspective. View. It's now we have this trigger and what we need to do, we need to add some logic for this trigger, right? We have created a lot of blueprints, but actually, if you click here, you can see that your level has its own blueprint. So we can open this level blueprint. Okay? So I'm going to let it right here. I can see that my level is not saved, so let's save it. Save all. Okay, now let's go back to this blueprint. Okay, we don't need this events and just going to delete those again, we want to check that moment when a player overlaps this Trigger box, if you right-click, you can see that you already have the name. You can see that you already have your trigger box here. And you can add event for it. That's because you have your trigger box selected. So before we do that, let's rename this Trigger box because I don't like this, This name of it. We're going to use F2 button and let's give it a name, e.g. start, start level. Okay. So now we have this Trigger box. Save it. So now I'm going to select this Trigger box again, go back to the blueprint. And although it didn't change the name for the Trigger box here, that is a k, it's going to change it later. So if you open this Add event, you can find collision. And we can open this up and find on actor begin overlap. And that's what we need, right? You can see we have the name of the trigger box, restart level right here. That's the name that we gave to the bulks. This is very simple logic, so if the character overlaps the box, then we want to restart the level. First. Let's, let's check if it is a character. So we're going to use our Cast to ThirdPersonCharacter. And we're going to use this other actor. So if the character overlaps this box, we want to restart the level. What it means, it means to open level. We have opened level by name and up and level by object reference. And we're going to use this one. Because here we can select the level that we want to open. In this case, it's win-lose. So this is just the name of the level that we have created. If you didn't create a new level and if you are working with your old level, you need to select the name of the level that you are working with right now. So I'm gonna save, compile this. Let's go back and check. So let's say we have very clumsy. Uh-huh. You can see it just restarts the level. So let's check that when we are here on this platform, it doesn't overlap the Trigger box and doesn't going to check this platform as well because it goes down? No. Okay, very good. So yeah, jump, jump, jump. No. Okay. So if you want the character to fall a bit longer, you can, let's select this and you can move this Trigger box a bit down. Now, if we save it and go back to play, you can see we can see a bit of the falling so we can understand what happened. Yeah. I think I like it. I'm just going to leave it like this because I want to see the animation of the falling. That was good. Okay, nice. 34. 3.4.2 - Add a Trigger Box for win: Now let's create logic for winning. In this case. First, you need to decide in what case player wins our game. Your game, of course. Although you can imagine a lot of different triggers, Let's start with something simple. And I want the player to go all the way to this platform. And if you overcome all this platform, that means that you won the game. So again, we're going to use triggers so we can put a trigger box right here. Let's do this cell trigger, Trigger box. We can move it later if we need to. Let's rename it again F2. When game. So this is the box. And when you character overlaps with this box, that means that he is the winner. So before we do that, let's add a few coins just to make this prototyping level to be more beautiful. So you remember we help the coins. I have the blueprint right here. So I'm going to move this coin. I decided to put this coin here, this kinda bit higher, right? So we have collected four coins and we fell. That's fine. Now nothing happens because we have the Trigger box, but it doesn't mean anything because we didn't have any logic for it. So let's add some logic. 35. 3.4.3 - Add a UI Widget: So now it's time for logic for the win, for the women Trigger box. And in this case, what I want to do, I want the player to see you win, sign right here. And I also want him to have two buttons. One button allows him to play the game again, and on the other button allows him to quit the game. We're going to open the content draw where again and go to Blueprints folder, I think. Yeah, let's do it here in this Blueprints folder. And I'm going to create Widget Blueprint. If you watched my previous lessons, you know what widget blueprints are? Because we have created one for coins. If we see the coins and the number of the coins on the screen. And this is the widget. So we're going to create the Widget Blueprint once again, user widget. Let's rename it WPP for Widget Blueprint. You can give it any name you want. Okay, Let's open this up. For widgets. We always start with Canvas. So let's type Canvas. It is just drag and drop it like this. So this is just empty canvas. So we're going to add a text. This one, drag and drop. It's on the Canvas so that it is below canvas panel. And now you're going to select this text block and go right here. Change the text to you. One. You can change the color, but I'm okay with just white. We also can change the size. So now we have this anchors. So if you click here, you can select a lot of different end curves. And what does it mean? It allows you to set where an element will be on a screen from this anchor, e.g. right now, the anchor is right here, which means that this text will be very close to this left side. You can see if we put anchor e.g. here, that means that this text will be no. First of all, we need to make this window bigger. So that means that it will be here in the middle of the screen. You can move it a bit up and down, just how you like. It. Doesn't matter the size of the screen. Your text will be aligned with this line, which is the center line. If you want to align it to e.g. left side or right side, you can just choose other anchor. Let's select this text. You also can see that we can choose a font, but if you are trying to find, even given some basic fonts, you won't find it here because first you need to upload with this phoned to your project and will not change the font. I do like the size. So let's save compile. And although it is not finished yet, you remember that I want two buttons here. We just want to check if everything will work. Of course, right now, nothing will work because it's just a widget. So what you're gonna do, going to select this Trigger box. Here it is, and open the blueprint of the level again. We already have the logic for restart level trigger box. We're going to add another one for Trigger box one, which is the win, lose Trigger box. The same thing we're going to cast to work here IK term. It is absolutely the same. But after that, instead of open level again, we want to create widget. You go. For the class. Let's select the widget that we have created, this one, u1. Right? Very good. We're going to add this widget to viewport. Target will be the widget. Now let's save compile. And we're gonna save this as well. So now if we go all the way to the end of the level, we can see the u one side, but you can see the game continues, which is not good, which is not good. But atleast, we checked that we have this hw1 sign when we finished the game. 36. 3.4.4 - Buttons for the widget : Okay, Now let's add the two buttons. So if you go here and type bottom, you can find a pattern. And then tray here in the Canvas. I'm going to rename it to sell the first button will we play again? And the second button will be, In, the second button will be quit. Of course, we need a text on it. So let's add text and drag and drop it on this button. You know what? I'm going to just delete this second button for now. There's going to be working with this one. I'm making it a bit bigger just the way you want it. And let's move it somewhere, maybe right here. And we're going to anchor it. E.g. right here. Actually now want to move this a bit. So for the button, we can choose the color. Let's choose something red. Thing. That's fine. Now go to the textblock and change it. Type play again. Okay, so here's the button. So we have created this first button. Let's add logic for it. If you select the button here and then scroll all the way down, you can find events and buttons have a few events, e.g. unclicked on pressed. And in our case, this one on clicked is what we need. Because we're going to click this button with a mouse. Let's click here. What it does. It opens the graph inside this widget. So if this button is clicked, we're going to open level. Just the way we do with the box that restarts level. We do the same thing with this button. Don't forget to select your level here. Okay, save, compile. Awesome. Now go back to designer and let's add another button so you can just duplicate it. Right-click Duplicate. And this is the same button. All you need to do is rename this one and change the text. So here's this button. Let's move it. E.g. to the side. One little thing, maybe I want this button to be a bit bigger. Like this. I'm gonna do the same for this. Because all the buttons should be one size. Doesn't matter how much texts they have on it. And now we need to add logic for this one. We need to select this button and go all the way down to the events. Again, find this onclick event. And you can see a way again in the same graph part of this widget. So if this button is clicked, we, what do we do? We quit game. Yeah, sometimes it's that simple. So we're going to save compile. We can go back to the level and play it. Play. If you created very big level and you don't want to play a game or from start, from the very beginning. Every time what you can do, you can escape and then e.g. you can, if you want to start here, you're just right-click and then play from here. Okay. Okay, so now we do have the buttons, but we can't click the buttons because where you see I'm moving my mouse. But what I'm doing, I'm just keep moving my game. And I also can play it again. And we're going to fix that. But first, let's go back to this and move this to the side. And this one, I'm going to change the anchor and put this somewhere here. Maybe even here. I didn't know. I just want some kind of space between this button and the edges. So what we need to do now, we want to be able to click on these buttons, right? So we need to do two things. First, we need to be able to use the mouse. We want to pause the game when we see this screen, since it happens with the widget, we're gonna do it here in the widget graph. Let's go a bit higher. You can see that we have a few events. So I'm gonna use this event construct right here. This event is called After the widget is constructed. So when this widget is constructed, what we want. So first we want to get player controller. Then we're going to use set in foot mode, UI only node. And this node set up an input mode that allows all the UI to respond to user input. What it means, it means that the gain will not respond to your mouse movements or clicks, only the UI. And that's what we want. We want to click the button, which is right here in this UI widget. We don't want to interact with the game anymore. We want to interact just with the widget. And that's why we're going to connect this event construct with this node and connect this player controller would display a controller input. And we want to see the mouse, right? So from this player controller, Let's drag and drop like this. And type. Right here we have set show mouse cursor. That's what we need. Connect these two nodes together and we want to show it. So click this checkbox. So now we're going to see the mouse. And only one thing left. We want the game to be on pose. So let's find pose. Yeah, here it is. Said game paused. Again. This is posed right here. We need to click it to in order for it to be true. So let's save compile. Just going to start my game right here. So we're going to be here, okay? So as you can see, we see the sign, we see we see the mouse. The game is on pause. We can click Play again. Let's do it. But after you click Play again, you can't play anymore. You don't see the mouse. And right now I'm trying to make the character walk towards backwards, doesn't matter. Jump. He does not react. That's because let's go back. That's because we need to set input mode. So from this player controller, another branch, set, input mode. Game only. Now and again the input will work, but only if we connect this two nodes together, because this one is the button play again that we click. We click this button. It opens. It opens the level, and then we want the input to work. So let's connect those. Save compile. Go back to the game. Right? We want play again. Yeah, I can play again. Perfect. Now let's try to click Quit. And it just quits. Of course, since it's not, since it's not the finished game, it will not quit to menu is just a simple quit from the plain mode. 37. 4.1.1 Widget Design: Let's create a menu for our game. In order to create a menu, we're going to use widgets. You can remember that last time we used widgets in order to create this u1 screen. And this time we're going to use widgets. Once again, I'm going to open the Blueprints folder. And here you can see this, the widget that we have created last time. So let's just do the right-click and then go to User Interface and find widget blueprints. I'm just going to rename it. I'm going to call it menu. So let's click and up in it. Okay, First we're going to start with Canvas. I'm going to drag and drop the canvas panel is just empty canvas. And then on this canvas we're going to create the widget or the menu in our case, since I want just a very simple thing, just two buttons I actually could have created is just like two buttons, but I want to show you all what are the elements we have inside this widget creating tool. So let's find vertical walks and drag and drop it like this. So now we have this vertical box and what the vertical box does, it allows you to arrange elements vertically within this box. Why do we can do we can change the anchor for this box, maybe two left side of the screen and move it to the side. And I'm going to make it a bit bigger. Just like this. If you want it to be all like really close to the edge, you can change e.g. this to zero and then the box will be this close to the edge. But I think I'm okay with this. Like 30, that's fine. And now inside this box, let's add two buttons. Actually just going to add one button and then copy its settings for the other one. So this is the button. Since I want two buttons. Maybe it's not that important in this case because we have only two buttons, but let's imagine you have three or five buttons. And in this case, you might need to set margin between the buttons because you want it to be accurate. So let's select the button and now you have details for this button opened here. It has the padding. By changing this number, you can adjust where the button is located. So e.g. I want it to be ten from the top. Maybe even bigger, 50 from the top. And I wanted 50 from the bottom. And then I go to color of this button, which is the background color. And let's select just the red one. In now for this button, of course we want some text on it. So let's type text and drag and drop it on the button. Now we have this textblock. Of course we want our custom text instead. So let's type start. And now, when you go to phoned, you can change the size. And when you are changing the size, you can see that actually you're changing the size of the modern as well. Which is good. So I think that 50 is fine, but it's, of course it's up to you. What do you want to do? In the second button will be just quit. So let's select this button. Control copy or Control C to copy, control V to paste. And we have just the same button. And because we have set the padding, now we have this distance between the buttons, which is great. So the only thing that we need to do is to change the text here. So let's go to the text and type. Quit. Okay? If you decide that you want this button bit higher, instead of moving it, you can just select the button and e.g. select the top padding zero. And now you can see it is much closer to this button just because it doesn't have the margin, but it still has the distance because the first button, this one, it has the bottom margin, which is right here for this, for this button, I actually like the way it looks. So let's save, compile this thing, and let's continue. 38. 4.1.2 Widget Graph: We have two buttons. What we need to do, we need to decide what these buttons do. In order to do that, let's select the first button. Then go down to the events and find this unclicked event. If you watched my previous lessons, you already know how everything works here. So it's not a surprise for you. So when the button is clicked, What we're gonna do, we're gonna open the level. And I'm going to select this by object reference so that we can select the level from the list. I'm going to select this win-lose level, which we have created last time. Then let's go back to Designer panel and select the Quit button. We do the same on clicked. And if we click Quit, of course we want to just quit the game. Mandy out, we have this node, quit game. Okay, so this is very simple things. Let's just save and compile. 39. 4.1.3 Menu Level: Now our next step is actually create a space where we can see this menu, right? So you already know that you game consists of levels and actually menus, just another level. It's not how we understand levels as gamers, but it's just how it works. So in order to create menu, you need to add another level to your game. So File New Game, new level. And this time we're going to add just the empty level. Okay? This is the empty level. Nothing interesting here. Let's click Save. And when you click Save, it asks you to create a new name for your level and save it. So I'm gonna just give it a menu name. But when you create this new level and click Play, you can see that we have this coins thing here. That's because we have created this widget to collect coins. And it was automatically created when we start this level. Moreover, the character is here somewhere as well, and we didn't want that. And in order to fix that, I'm going to just click Stop. We're gonna go to the content draw where once again, then here I'm just going to create a new blueprint class. We're going to use this class Game Mode base. And as you can see, Game Mode ways defines the game being played, its rules, scoring and other things. So that's what we need. I'm just going to rename it to, okay. And if you open this up, you can see that there is nothing to render right here. Because the default bond class is empty. You can see. So let's just close this and now you're going to need world settings for this level. I have already, I already have the settings right here. But if you don't see this world settings, you can go to window. Just make sure that you have your menu level opened. You go to Window and then find this world settings right here. So for the world settings, we're going to find the game mode overwrite, and right now we have none, but I'm going to drag and drop this blueprint class here. Okay? Now when, when I click Play, no coins and no character is being rendered, which is good. 40. 4.1.4 Level Blueprint: Now it's time to add the widget that we have created to this blank menu. Let's open the blueprint of this level. So right now it is empty of course. But what we're gonna do, we're gonna use this event begin play. And as you remember, just the way we did before, we're going to create widget. So we're going to select our widget. Don't forget though, if you haven't saved your widget, you will not see it's here in the list, so makes sure your widget is saved. And now you can select it here. And another step, we're going to add its two, viewport. Ok. And target will be the widget. Okay, save compile. Now let's open this level. Click play. Why do we have the buttons? Let's try to click on start. And what we see, we see this level which we have created last time, where the platforms and I can click play and play the game. Very good. But I see a problem here. So let me start again. So you can see right now, I do need my mouse to be visible in order to click the buttons. But once I, when I start the game, I don't need the course are to be visible anymore. So we're going to fix that because we don't need the course are to be visible. So let's exit this level and fix it. 41. 4.1.5 Mouse Cursor: In order to do that, let's go back to the widget where we have created the menu and go to graph. And if we go a bit higher, we have Event Construct here. As you can see, this event called after the widget is constructed. So what we want to do, we want the mouse to be visible in the menu. And moreover, we want it to work only with the elements of the menu, which is the elements of the UI. So in order to do that, Let's get player controller first, because that's the way we get the player controller. And in this case it's the mouse. And then this node, a weakness that show mouse cursor. It does what it does. It say? It says whether the mouse cursor should be displayed. So we're gonna, we're gonna check this box because we want to see mouse on the menu. And of course we're going to connect it with event construct. And now since we want it to operate only with DUI, we're going to need set you, this one, set input mode UI only. This node set up an input mode that allows only the UI to respond to user input. And that's what we need, right? So I'm just going to move it a bit higher. And don't forget to connect it with the player controller. And then for the game, the game starts when we click Start button, right? So we're gonna get this node, this node and this node once again, copy paste. But this time, let's move, let's move those to the bottom. So this time, we actually don't need this node. Because instead of this one, we have set in. Here, said input mode game only. We had UI only, and now we have game only. Which makes sense, right? So we can exit like this once again. Then from this open level node, I'm going to connect it like this and uncheck this box because we don't want to see mouse cursor in the game. So let's save, compile and check. So I'm going to go to the menu, was still can see the mouse. And when we start the game, we don't see them. 42. 4.1.6 Add a background image: So I wouldn't menu looks like this. I know that we do simple things here, but let's add a picture because right now it looks, it doesn't look like a menu, right? Because all this black, it's just emptiness. It's nothing. If you do want a picture on the background, I'm going to show you how to do that. First, you're going to find a picture. And I have found this one. I like this one. You can use any picture that you find. Absolutely any. Okay, So we're going to use this picture. First. We're going to open the continent draw where inputs this picture. I'm going to use the objects folder because that's where we are having all our objects. Just drag and drop your picture here. Don't forget to click Save All. And now you can see it's texture save. And now you need to right-click on it and go to Sprite actions and go to apply paper 2D texture settings. But it does, it sets compression settings. It's good for optimization and other things. So let's do that. Again. Save, save, save, save. Okay, Very good. Now let's go back to the menu designer. Oh, it's still simulating. I'm going to click stop. So we have two buttons and we want the picture or the image to be right here. So if you type too much, you can find this image thing. So let's put it on the canvas. And for this picture you want it to be everywhere, right? So let's go to anchors and select this one. And then if you go to Offset and change those to zero, you can see that now it fills all the screen. Then you're going to select your image here. Brush image, none in here, you can find your image. Okay? So I have selected my image in the list. And here this, we see only one problem here. We don't have, we don't see the buttons. Let's just move this layer to the top. And now, now we can, now we can see it. All right, so if you want to move e.g. your buttons, you can just move this vertical box right here. Okay. Let's just check. Okay, yeah, I think that's fine. Maybe it's too close to the edge. Alright, I know it doesn't look good. We do not do a beautiful design here. I just wanted to show you the functionality. Okay? So don't judge me. We're going to save, compile this thing and go to the menu level, click Play, and voila, now we have this image in two buttons and we have our game. We can play it, which is great. And yet we've done it. 43. 4.2 Where to find environment: Now you're really close to actually create something that looks like a game. But you can't create a real game with just basic shapes. And you probably going to need some models for environment, for your character, for everything that is going to be inside your game. I have already showed you a few websites. I'm going to show you once again. One of them was this one where we have downloaded character in an older animations. The other one was turbo squid, where you can find a lot of 3D models. We also have found the coin that we, that we use in the game on this website, you also have Sketchfab and as you remember, we found platform on this website. So yeah, there are actually a lot of different resources available to you when you are creating your game. But I want to show you another one. This is Marketplace inside Unreal Engine. So when you open your epic Games launcher and go to Unreal Engine tab to find this marketplace tab. And what it has, it has a lot of different things inside. You can see that it has the price, but we actually have a few free ones. If you go to the free tab and choose permanently free collection, you can find a few very good packages with a lot of things for a game. Since they are permanently free, you shouldn't be worried about they changing the license at some point. Or I don't know, let's choose something forward game. We have e.g. Egypt. Usually they have all the assets that you will find inside lane down like this. So you can have an idea which you have. Fantastic village is one of the good packages that you can start with. It has a lot of different things inside. And you can see it works great for a lot of games then just platformers, because we have a lot of, a lot of different things here. But for this, for, is I'm going to choose the Asian village. Although you might think different things about our character, I think that this environment fits him. It does. We also can use these as platforms. So yeah, I'm gonna take this package free. Accept. Now I can add it to my project. It's going to take a few minutes. And then after that, we're going to open the project and we're going to have all the acids inside. 44. 4.3.Creating a real game: Alright, so I have the project opened. Let's take a look. Go to content rover. And yeah, here it is, the Asian village and all the acids are right here. So let's take a look what we have. We have some blueprints, we have maps, materials, meshes, textures. We have something to work with. And I want to show you how the process looks like. Although we don't have time to create real level of a real game, I'm just going to show you how it works so that you can do the same when creating your own game. So I probably going to start with a new level. And it's gonna be just a basic level. You're going to add. The player starts first, just where you want it. Maybe like this. Then you go to content aware and start building. Let's first put some landscape textures. We have some grass, so we can just drag and drop the grass. On the floor. We have some ground ground plane, transform it. And then put some stones. This. Then we can take a few meshes. Do we have e.g. we can put some bush here. It needs some time. And then a few bushes for decoration. You can put some grass and you can do it several times. E.g. we have a few we can put several brushes like this example. Pretty good. And then e.g. we can use this cliffs. But this cliff, It's very big one. Let's make it smaller. You can see that depending on the assets you use, it may require some time for the system to actually understand what happens to render the objects, but that's definitely fine. So e.g. I want to, this is really a big cliff right here. And move it like this and make it make it smaller. I'm not sure if it's enough distance between, but the idea is that my character can jump from here to the side. And then from here to the next one. Let's click play and to click washes. How does big, big rock? And then, yeah, that's definitely too high. So now after you do this, after you design your level, you can e.g. put some coins. Okay, so now we have the coins. He collects the coins, gems, this one. And collected one. Alright, let's take a look at this Asian village folder. And once again, I just wanted to take a look. What do we have? We have a few trees. We can e.g. put this tree here. Closer. They have two different kinds of trees. So we can put one here, one there. You can see that with all these decorations and textures, this looks more like a real game, right? Although it's not just a prototype. But with this package or with other free packages, you can really create your own game and make beautiful environment. So the only thing that you need to do is to create the game itself using all the techniques that you already know. E.g. we could use some of those buildings as platforms. What we need to move it to this side. So yeah, this different views, they can help you a lot because you just open the view from the side and you can see what happens. Now e.g. we can use one of the blueprints that we have, which is the platform. It's in the Blueprints folder. I think we have this moving platform and we can use it because we have this blueprint for this platform, but you can use this blueprint for how the object I'll you need to do is to change the object. And it will have this moving platform. Okay, let's take a look. Now. Look at the tree. Okay, yeah, that looks nice. It has all the shadows and everything. Okay. And here is my moving platform, but I think it's too it's too far away from me. But that's okay. Let's put a trigger box. And you remember that we are using this trigger box to end the game when it's time to end the game. So you already know how to do that. Let's do it real quick. We select I'm going to select the trigger box. This time. I will not rename it. But of course for the game, I think you should rename. So then you're going to, then you're going to open Level Blueprint. Now let's try the trig box works. It does. So now if I didn't jam, yeah. So now, using everything that you have learned from this course, you can actually create a game. And this free packs is a very efficient way to do that. I will move this platform bar, but let's put this banner. I think it's here in the blueprints, double jump banner on this platform. And now we're going to need double jump to reach this moving platform. Okay? I just have this idea to use everything that I showed you. The coins, the Jim's. Whoop. Okay, so now I should be able to double jump. Oh, perfect, perfect. So that's how you do it. And I think that using everything from this course, you'll be able to create a real game. And I can't wait to see your game. 45. 4.4 How to export your game: Alright, and this is our last lesson where I'm going to show you how you can export your game. I really hope that you will create your own game when at some point you will need to export it. So let's do it. First. I encourage you to check that you don't have anything that you don't need inside your content rover. Us, we have a lot of things that we don't need. Once you've done that. Then you go to the platforms and select package and settings. Okay, so first we go to this Build configuration, and now we are in the development configuration. We need to change it to shipping because we're going to ship Expert. Then here you can choose where you want to export your game, e.g. desktop, then we have this full rebuild. And if you want to export your game as a whole, then you need to check this box. Or if you correct some levels and you want to rebuild your game, you can rebuild only these levels, only the levels that you have changed. And then you can just uncheck this box. But for now, I'm going to check this box description. Here. You need to fill all the information about your project and the thumbnail. So what you're gonna do, you're gonna choose an icon for your game. I'm going to use Photoshop to crop this. Save it as PNG square, like this. And then save. Excel icon should be 182 by 192. That's the format for the icon. You're going to Export and select the PNG format I use in Photoshop. But you can use any application. And there were also a lot of online tools which can help you to do that. Okay, now we have this thumbnail. Then we go to maps and modes. And here you need to set a default map. So this is the map that your player will see when he opens your game. So of course it should be the menu, right? So we do have the menu. Let's find it here. Game Default Map shouldn't be menu as well. Okay? Right now, let's go to supported platforms. Here you can choose which platform you want to support. And I just want to select Windows. Okay? We're going to expert on before Windows. And then you scroll down to platforms and find windows. Since we checked the Windows box. Here, you're going to see splash. Splash screen is the first graphical notification you receive when you visit any app or a game. So when you e.g. when you open the Unreal Engine, you see this image, right? So we're just going to choose the image that we use for the menu. Just make sure that you select PNG files. Because if you click here, it will show you other formats. But PNG works better than the other formats. In here we select the eye icon. You can see dimensions are 256 by 2526 and it should be I, c 04, which is the format for icons. If you don't have special application that can work with ICO files which you can do can just use any Cloud converter for this. Alright, so now we're gonna go back. I see that we need to save something. Okay, Now we save, and now we go to platforms. And you can see we already have windows here. And if you click Package project right now, you're going to see this message. And what it says, it says that the SDK for Windows is not installed. That's right. You probably don't have the SDK for Windows on your computer and we need it if we want to expert again for Windows. So let's fix that. You're going to see this message and what you're gonna do, you're gonna go to Google and find windows, is decay. And find window says decay. And here is the first link you can see it's microsoft.com. You're going to open this link. You can see that this SDKs for Windows 11, but it actually works for Windows seven and up. So we're going to download the installer and then just install these SDK. So you need to find this folder, which is Unreal Engine 55.0, or it can be 5.1 if you use the next generation of Unreal Engine. So it should be either in your program files and Epic Games folder, or I have this folder inside my app. So you're going to open engine than binaries, then third party. Then that net than Windows host, this one. And this one. Then you're going to copy this file. Then we're gonna go back to binaries and find dotnet and just paste this file right here. Now you can open the browser again and find net Core 3.1. Open this up and download it for Windows 64. And now we're going to install it. Now we're going to launch our project once again. So what I'm gonna do, I'm gonna delete these Asian village pack. Because as you remember, we have menu as the start of a game. If I click Start, then we're going to have this level. So in fact, I don't need this package and they don't need the level to the maps and delete this map that we've done. This was the level with the with the assets. To be honest, I should have started with I should have started with that. First, you can delete the level and then delete the assets for this level. This is what it is. Okay, now let's try to go to Windows Package project select folder. And we're going to wait a few minutes, and let's take a look. After a few minutes. Hopefully, you'll see build successful. Yay, congratulations. That's a very good news. Now, we can open the file with the game and take a look how it works. So our game is very simple, so we just have the menu, we can click Start and see the level. Awesome, everything works. Congratulations. If you're packaging has failed, you can go to filters and filter adjust the errors and filter just the errors. 46. Thank you!: You made it to the end of the course. Congratulations, I'm proud of you. The end of this course means the beginning of your own adventurous way along with Unreal Engine. And who knows where it will lead you. I hope you enjoyed learning new things and that now you feel more confident. And I hope to play your game soon. Good luck.