Transcripts
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.