WEBVTT

00:07.300 --> 00:08.530
Welcome back.

00:08.560 --> 00:10.330
Now, we'd like a checkpoint.

00:10.360 --> 00:16.810
Now, by a checkpoint, I mean something in the world that once we reach it, we'll save our progress.

00:16.810 --> 00:19.360
Something that looks kind of like this.

00:19.810 --> 00:26.020
So I'd like to make a checkpoint class, but I'd like this to be based on the player start class.

00:26.020 --> 00:28.630
And not just a regular actor.

00:28.630 --> 00:29.170
Why?

00:29.200 --> 00:32.320
Because I like it to have a player start tag.

00:32.320 --> 00:39.790
And I'd like to be able to spawn in at one of these checkpoints, so I'd like it to behave like a player.

00:39.790 --> 00:43.750
Start that our choose player start function can use.

00:43.750 --> 00:50.320
So for that reason, we're going to make a new checkpoint class based on the player start class.

00:50.650 --> 00:55.360
Let's go ahead and go to C plus plus classes Aura Public.

00:55.360 --> 01:00.100
Now we could put this in actor, but really it's going to be its own thing.

01:00.100 --> 01:01.780
It's going to be a checkpoint.

01:01.780 --> 01:04.390
So I'm going to make a new C plus plus class.

01:04.390 --> 01:10.120
Go to all classes and look for player start and choose player Start.

01:10.570 --> 01:19.060
And this can go into our checkpoint folder and we're going to call this simply checkpoint.

01:19.060 --> 01:21.160
Let's go ahead and create the class.

01:23.190 --> 01:28.200
And we'll close down the editor and find our checkpoint class.

01:28.230 --> 01:30.420
Now, we do have a lot of tabs open.

01:30.420 --> 01:31.620
At least I do.

01:31.620 --> 01:38.250
So I think for now I'm going to go ahead and just close all tabs and go straight to my checkpoint.

01:38.250 --> 01:41.520
And that's going to be in public checkpoint.

01:42.130 --> 01:43.780
Here's the header file.

01:44.170 --> 01:45.910
Here's the cpp file.

01:45.910 --> 01:49.810
And we have ourselves a checkpoint based on a player start.

01:50.020 --> 01:51.370
Okay, great.

01:51.400 --> 01:54.370
Now our checkpoint is going to need a few things.

01:54.370 --> 02:00.580
I'm going to give it a public section and create the constructor.

02:01.690 --> 02:05.080
And go ahead and generate the definition for the constructor.

02:05.530 --> 02:06.730
We don't need the tick.

02:06.730 --> 02:13.060
So we can take primary actor tick dot b can ever tick equals false.

02:13.060 --> 02:14.680
We can set that right away.

02:14.680 --> 02:17.710
And I like a couple of components here.

02:17.710 --> 02:19.780
For one I'd like a static mesh.

02:19.780 --> 02:22.000
Now let's take a look at the player start class.

02:22.000 --> 02:22.990
Let's go to it.

02:22.990 --> 02:26.170
And you may have noticed that player starts have a capsule.

02:26.620 --> 02:31.510
Now player starts are based on a navigation object base.

02:32.080 --> 02:35.620
Now we can go deeper and go to that class.

02:35.620 --> 02:41.830
And notice that we have a capsule component along with a good sprite and a bad sprite.

02:41.830 --> 02:43.780
And notice the capsule is not editable.

02:43.780 --> 02:45.340
It's not visible anywhere.

02:45.730 --> 02:47.380
It's just there.

02:47.860 --> 02:53.110
And the good sprite and bad sprite, those are billboard components for when our player start is in

02:53.110 --> 02:55.510
a bad location or a good location.

02:55.810 --> 03:02.290
Now if we go into the cpp file here, we'll see that the root component is the capsule.

03:02.560 --> 03:10.180
So we're going to have to live with the capsule being the root just like it is in the character class.

03:10.720 --> 03:11.770
No worries.

03:11.770 --> 03:15.250
We'll just keep that in mind so we can close those.

03:15.820 --> 03:19.750
And for the checkpoint I'd like a couple of variables.

03:19.750 --> 03:24.670
I'm going to make a private section and make a t object pointer of type.

03:24.670 --> 03:30.730
Use static mesh component I'm going to call this checkpoint mesh.

03:32.520 --> 03:34.260
I'm going to give it a uproperty.

03:34.830 --> 03:36.510
Make it visible anywhere.

03:37.440 --> 03:45.570
And in addition to checkpoint mesh, I'd also like an overlap volume that we can overlap with to reach

03:45.570 --> 03:46.470
the checkpoint.

03:46.470 --> 03:48.840
So I'm going to make another T object pointer.

03:50.280 --> 03:52.110
This will be a use for your component.

03:52.110 --> 03:53.430
I'd like it to be a sphere.

03:53.460 --> 03:56.940
I'm going to forward declare that type and call this sphere.

03:57.300 --> 03:59.790
And we're going to make this visible anywhere as well.

04:00.150 --> 04:02.940
And I'd like to overlap with the sphere.

04:02.940 --> 04:06.150
So I'm going to need an on sphere overlap function.

04:06.150 --> 04:11.700
And where do we have an on overlap function that we can steal from.

04:11.700 --> 04:13.410
Let's go to aura projectile.

04:13.410 --> 04:15.930
That one has an on sphere overlap.

04:15.930 --> 04:17.580
We can copy that signature.

04:17.580 --> 04:20.640
Let's make our life easy and use that.

04:21.240 --> 04:22.620
This will be protected.

04:23.910 --> 04:25.800
We have on sphere overlap.

04:25.800 --> 04:28.650
Let's go ahead and generate the definition for that.

04:30.250 --> 04:34.240
And with that, I think we have a good start.

04:34.600 --> 04:42.070
So I'm going to bind my on sphere overlap to the on component, begin overlap on the sphere and begin

04:42.070 --> 04:42.550
play.

04:42.550 --> 04:48.580
Which means I need to override begin play virtual void begin play override.

04:49.630 --> 04:52.270
I'm going to go ahead and define that as well.

04:54.310 --> 04:56.230
So now we have a few things we need to do.

04:56.230 --> 05:02.200
First, I'm going to construct my new objects I don't need or a projectile anymore.

05:02.950 --> 05:06.850
Unless of course I want to copy create default subobject here.

05:07.360 --> 05:09.550
Actually, that sounds like a pretty good idea.

05:09.550 --> 05:11.560
Let's do that right there.

05:11.560 --> 05:18.070
And I'll include use sphere component and I'm going to attach it to the root.

05:21.810 --> 05:24.870
Set up attachment to git root component.

05:26.430 --> 05:30.450
Now let's look at our projectile settings for the sphere we're setting.

05:30.450 --> 05:37.230
It's collision enabled to query only setting it to ignore all except for world dynamic and world Static

05:37.230 --> 05:39.420
and overlapping the pawn.

05:39.420 --> 05:41.550
We can just copy all this, actually.

05:42.310 --> 05:44.410
Why type out boilerplate?

05:44.860 --> 05:50.710
Now we don't actually want this to be set to the collision object type IC projectile.

05:50.710 --> 05:53.020
So I'm going to go ahead and remove that line.

05:53.020 --> 05:54.940
But I do want it to be query only.

05:54.940 --> 05:59.080
I do want to ignore all and I only want to overlap with the pawn.

05:59.080 --> 06:02.470
So I actually don't even need these two lines.

06:02.470 --> 06:04.360
That is perfectly fine.

06:04.930 --> 06:07.390
Now for constructing our static mesh.

06:07.390 --> 06:13.750
Really, I can copy this line with create default subobject in it and paste it and just replace a couple

06:13.750 --> 06:14.380
of things.

06:14.380 --> 06:16.600
This is going to be the checkpoint mesh.

06:17.080 --> 06:20.890
It's going to be a U static mesh component.

06:21.070 --> 06:23.260
We'll call this checkpoint mesh.

06:26.160 --> 06:30.300
I'm going to set its attachment and its collision enabled.

06:30.300 --> 06:32.310
So I'm going to copy those from above.

06:32.810 --> 06:37.130
So checkpoint set up attachment will attach to the root component.

06:37.130 --> 06:38.600
We'll set collision enabled.

06:38.600 --> 06:41.810
And I'd like to use query and physics for the mesh.

06:42.140 --> 06:43.730
And I wanted to block all.

06:43.730 --> 06:47.480
So I'm going to set collision response to all channels.

06:47.960 --> 06:51.200
So I'll copy that line replace sphere with checkpoint mesh.

06:51.200 --> 06:53.780
And I'm going to use ACR block.

06:53.780 --> 06:55.370
I'd like to block all.

06:55.790 --> 06:58.520
And there's my checkpoint mesh okay.

06:58.520 --> 07:03.350
So I also want to bind to a delegate and begin play.

07:03.350 --> 07:06.470
Or a projectile has that covered as well.

07:06.920 --> 07:09.320
We're going to go ahead and just copy that line.

07:10.330 --> 07:11.590
And we're going to paste it here.

07:11.590 --> 07:13.780
The only difference is we're not in aura projectile.

07:13.780 --> 07:18.460
We're in a checkpoint and we have that covered as well.

07:19.060 --> 07:19.510
Okay.

07:19.510 --> 07:21.910
So we have a checkpoint.

07:21.910 --> 07:24.010
We have an on sphere overlap.

07:24.010 --> 07:28.270
And we do want to handle saving the game and all that great stuff.

07:28.270 --> 07:31.960
But we should also handle what happens visually.

07:32.200 --> 07:36.310
We should have some kind of visual change to know that we've reached a checkpoint.

07:36.640 --> 07:44.200
Well, this particular static mesh has a material with some parameters that can be changed to make it

07:44.200 --> 07:44.770
glow.

07:45.220 --> 07:50.320
So let's compile and launch and go into the editor, and I'll show you what I mean.

07:53.940 --> 07:57.300
Okay, so I'm getting a compiler error.

07:57.330 --> 07:59.700
No appropriate default constructor available.

07:59.700 --> 08:02.970
That means we can't actually have a default constructor like this.

08:02.970 --> 08:06.180
We have to have a specific kind of constructor.

08:06.180 --> 08:09.090
Let's go and look at player start to see what that looks like.

08:09.090 --> 08:12.240
So go to Declaration of Usages.

08:12.240 --> 08:14.820
And here's the player start constructor.

08:14.820 --> 08:15.900
We have to have.

08:15.900 --> 08:18.540
It needs to take an object initializer.

08:18.540 --> 08:24.690
So we can copy this const reference to one and come back to checkpoint and paste that in and come back

08:24.690 --> 08:27.270
to our definition for it and paste that in.

08:27.270 --> 08:29.400
But that's not the only thing we have to do.

08:29.400 --> 08:35.640
We also should go to player start CP and take a look at what's happening here.

08:35.640 --> 08:39.240
Notice there's this super called with object initializer.

08:39.240 --> 08:42.120
We're going to have to do that in our checkpoint as well.

08:42.120 --> 08:46.170
So we're going to call super with object initializer.

08:46.170 --> 08:49.860
But notice that it looks like I have a typo here.

08:49.860 --> 08:52.830
This should be object initializer with an r at the end.

08:52.830 --> 08:54.180
So that's going to fix that.

08:54.180 --> 08:56.040
If we put that ah there.

08:56.040 --> 08:59.280
And now we have the correct type of constructor.

08:59.280 --> 09:02.790
And we can go ahead and compile and launch from here.

09:05.050 --> 09:11.500
All right, so I wanted to show you something special with our checkpoint.

09:11.500 --> 09:18.280
If we go to assets dungeon checkpoint and open static mesh checkpoint, notice that it's material is

09:18.280 --> 09:19.420
a material instance.

09:19.420 --> 09:23.230
And if we browse to it, here's the material instance.

09:23.230 --> 09:26.620
And I'd like to use our preview mesh SM checkpoint.

09:26.620 --> 09:31.570
I'm going to browse to the checkpoint and come back to our material instance and set that as the preview

09:31.570 --> 09:33.490
mesh so we can see what it looks like.

09:33.490 --> 09:35.710
And notice we have a glow parameter.

09:35.740 --> 09:43.150
And if we click and drag it to the right, our runes glow as well as part of the crystal so we can make

09:43.150 --> 09:43.840
this glow.

09:43.840 --> 09:47.770
And that's a good indicator that we've reached the checkpoint.

09:48.300 --> 09:49.560
So I'd like to use that.

09:49.560 --> 09:55.980
I'd like to create a dynamic material instance that we can ramp up with some kind of a timeline once

09:55.980 --> 09:59.220
we overlap with our checkpoint.

09:59.220 --> 10:04.590
And so for that reason, I'd like to add another variable onto our checkpoint.

10:04.620 --> 10:12.900
C plus plus class I'd like a function actually to create a dynamic material instance that we can then

10:12.900 --> 10:15.990
set properties for with a timeline.

10:15.990 --> 10:19.110
So really I just want a blueprint implementable event.

10:19.110 --> 10:22.530
So I'm going to make a void function called checkpoint reached.

10:23.730 --> 10:30.270
And checkpoint reached can take a you material instance dynamic.

10:31.550 --> 10:32.810
By pointer.

10:32.810 --> 10:35.810
And we'll call this dynamic material instance.

10:36.940 --> 10:42.430
And I'm going to make this a blueprint implementable event so it gets you function blueprint implementable

10:42.430 --> 10:43.240
event.

10:43.420 --> 10:47.920
And I want to call this as soon as we've reached our checkpoint.

10:47.920 --> 10:54.310
So I'm going to have a function that will call this after creating a dynamic material instance.

10:54.310 --> 10:58.930
So I'm going to make a function that's void call handle glow effects.

11:00.530 --> 11:02.060
With no input parameters.

11:02.060 --> 11:06.140
So I'm going to go ahead and generate handle glow effects.

11:08.590 --> 11:14.710
And in Handle glow effects, I'm going to create a dynamic material instance and call my blueprint implementable

11:14.710 --> 11:16.450
event checkpoint reached.

11:16.840 --> 11:18.610
So in Handle Glow Effects.

11:18.910 --> 11:25.930
At this point I know my on sphere overlap will have been called as I'm going to call this from on sphere

11:25.930 --> 11:26.470
overlap.

11:26.470 --> 11:31.990
So first I'm going to take my sphere and set collision enabled on it to no collision.

11:32.650 --> 11:36.580
So e collision enabled no collision.

11:39.460 --> 11:42.400
And then I'm going to create a dynamic material instance.

11:42.400 --> 11:46.000
I'm going to say you material instance dynamic.

11:46.000 --> 11:47.230
That's a pointer.

11:48.920 --> 11:54.470
This is going to be called dynamic material Instance.

11:54.710 --> 11:57.260
And I'm going to create one with you.

11:57.260 --> 12:03.140
Material instance dynamic double colon create.

12:03.140 --> 12:07.820
This is a static function that can create a new material instance.

12:07.820 --> 12:10.250
And it takes a material interface.

12:10.580 --> 12:15.800
Well that's great because our checkpoint is using a material instance as its material.

12:15.800 --> 12:25.130
So if we take our checkpoint mesh and call get material which requires an index and it's our first index

12:25.130 --> 12:29.480
so we can pass in zero, then we can create this dynamic material instance.

12:29.480 --> 12:31.040
Now the outer can be this.

12:31.040 --> 12:34.190
So this actor is going to own it.

12:34.190 --> 12:39.710
And now that we have a dynamic material instance we can set our checkpoint mesh.

12:43.200 --> 12:45.480
Material with set material.

12:46.950 --> 12:52.290
Passing in first our index zero and our dynamic material instance.

12:52.290 --> 12:54.390
Dynamic material instance.

12:55.400 --> 13:01.190
Now, once we've set our checkpoint mesh, then I'd like to call my blueprint implementable event checkpoint

13:01.190 --> 13:04.880
reached and pass in that dynamic material instance.

13:05.000 --> 13:07.430
So I'm going to call checkpoint reached.

13:08.720 --> 13:12.470
Passing in dynamic material instance.

13:14.120 --> 13:16.670
And we can handle the rest in blueprint.

13:16.880 --> 13:21.620
And as soon as on sphere overlap happens, I'd like to call handle glow effects.

13:21.620 --> 13:27.110
And we can perform some basic checks, like we can check other actor and make sure it has the player

13:27.110 --> 13:28.610
tag and so on.

13:28.850 --> 13:32.720
So I'm going to say if other actor actor has tag.

13:33.340 --> 13:39.250
Checking for f name player for instance.

13:39.250 --> 13:40.450
And that needs.

13:41.650 --> 13:42.910
Parentheses there.

13:42.910 --> 13:47.230
Then we can call handle glow effects and after handle glow effects.

13:47.230 --> 13:51.790
We've disabled collision on our sphere, so we can't do this more than once.

13:51.790 --> 13:59.140
So all we need to do now is implement our blueprint implementable event checkpoint reached in the editor.

13:59.140 --> 14:02.470
So I'm going to go ahead and we'll close out of the editor.

14:04.380 --> 14:11.670
And we'll just relaunch and create a quick timeline that we can use to ramp up our glow effect.

14:13.600 --> 14:15.100
So back in the editor.

14:16.120 --> 14:20.200
Now that we have our checkpoint class, we can make a checkpoint.

14:20.230 --> 14:26.020
Let's go into blueprints and we'll just go ahead and make a new folder called checkpoint.

14:26.020 --> 14:30.580
And here in checkpoint we'll make a new blueprint based on checkpoint.

14:31.810 --> 14:33.460
We'll go ahead and select that class.

14:33.460 --> 14:35.830
We'll call this BP checkpoint.

14:37.060 --> 14:39.100
So here's our player start.

14:39.130 --> 14:42.250
Now because it's a player start it has a capsule.

14:42.250 --> 14:43.990
If we select it we can see it.

14:44.380 --> 14:49.510
We also have our sphere component which we can increase the radius of.

14:49.540 --> 14:55.150
And in addition to all this we also have a checkpoint mesh which we can set.

14:55.150 --> 14:56.830
And I'm going to set it to checkpoint.

14:57.310 --> 14:59.140
So static mesh checkpoint.

14:59.170 --> 15:00.220
Now here's the thing.

15:00.220 --> 15:08.260
If this is a player start and we load in at this player start, well we're going to want to make sure

15:08.260 --> 15:10.720
we don't load in like right here in the center of it.

15:10.720 --> 15:11.290
Right.

15:11.290 --> 15:18.220
So what we can do is make our player start center offset from our mesh.

15:18.220 --> 15:20.710
Really it's our mesh that'll be offset from the center.

15:20.710 --> 15:24.970
We could take our checkpoint mesh and we can move it on back right here.

15:27.320 --> 15:32.540
So it'll be on the ground, but we'll spawn right in front of it, and we'll just make sure that we

15:32.540 --> 15:39.710
position this such that wherever we want to spawn, that'll be where we put the center of this.

15:39.710 --> 15:45.950
And actually, if we want to spawn in facing this particular mesh, we can actually put the mesh on

15:45.950 --> 15:50.810
this side of it, because we have a nice arrow component that shows which direction we'll face if we

15:50.810 --> 15:51.500
spawn in.

15:51.500 --> 15:53.090
So we can put it right there.

15:53.900 --> 15:54.410
Now.

15:54.410 --> 16:01.370
Our sphere, though, should be right around where our mesh is, so it might be a good idea for the

16:01.370 --> 16:03.860
sphere to be attached to the mesh itself.

16:04.950 --> 16:06.840
For now, I'm just going to move it over.

16:06.840 --> 16:12.840
But we could make sure next time we compile that that sphere is connected to the mesh.

16:12.870 --> 16:13.650
I'd like that.

16:13.650 --> 16:19.860
So I'm going to go ahead and move these lines down below the checkpoint mesh lines and make sure that

16:19.860 --> 16:22.800
the sphere is attached to the checkpoint mesh.

16:24.640 --> 16:26.500
So we'll do that next time we compile.

16:26.500 --> 16:27.640
That will be fixed.

16:27.640 --> 16:29.950
But here we have our checkpoint.

16:29.950 --> 16:34.420
And if we spawn in at this checkpoint, let's take a look at our capsule.

16:34.420 --> 16:36.640
Here's where our capsule would be.

16:36.640 --> 16:43.180
So if we want our mesh to be on the ground, it should be right there at the bottom of the capsule.

16:43.480 --> 16:48.610
So I'm going to take my perspective and go to right so I can see what I'm doing.

16:48.610 --> 16:52.870
And I'm just going to move my mesh down to just about this line here.

16:55.060 --> 16:56.140
So right about there.

16:56.140 --> 17:00.250
But I'm going to select my capsule and make sure whoops, I overshot.

17:00.870 --> 17:02.370
I think it's here.

17:05.590 --> 17:10.270
And I can zoom in a bit and I can even just make sure.

17:10.870 --> 17:15.970
By bringing this over and selecting the capsule that I'm not too low.

17:17.160 --> 17:18.600
So that looks pretty good.

17:18.600 --> 17:20.640
We can go a little bit into the ground.

17:21.230 --> 17:23.690
Like that, and then I can move this over.

17:23.690 --> 17:26.960
And I can also take my sphere and move it down.

17:29.650 --> 17:33.850
To about there, and I can even make my sphere radius.

17:34.390 --> 17:36.610
The same radius as the mesh.

17:37.220 --> 17:38.600
So about there.

17:40.260 --> 17:41.550
And that looks good.

17:41.640 --> 17:43.380
I'll go back to perspective.

17:43.530 --> 17:46.380
And now if I bring one of these in.

17:47.160 --> 17:49.140
I can compile, I can save.

17:50.130 --> 17:53.790
I'll put one of these in here, but this is actually our load menu.

17:53.790 --> 17:58.740
Let's go into our dungeon and we'll go back here.

17:59.960 --> 18:01.910
This is the back of the place.

18:01.910 --> 18:03.050
See, there's the front.

18:03.050 --> 18:03.950
Here's the back.

18:03.950 --> 18:08.390
I'm going to just remove this player, start and bring in a checkpoint.

18:12.100 --> 18:15.010
So blueprints checkpoint, BP checkpoint.

18:15.010 --> 18:15.850
And here it is.

18:15.880 --> 18:17.590
And we see what it looks like.

18:20.810 --> 18:23.990
I can hit end and it'll go straight to the floor like this.

18:29.010 --> 18:35.640
Okay, so now we just need to implement that glow effect with our blueprint implementable event which

18:35.640 --> 18:38.340
we called Checkpoint reached.

18:38.340 --> 18:41.190
So we have our checkpoint reached event.

18:41.190 --> 18:43.320
We can implement that in our blueprint.

18:43.320 --> 18:45.030
So we can go to the event graph.

18:45.120 --> 18:47.910
Right click Get Checkpoint reached.

18:49.050 --> 18:51.210
And we have our dynamic material instance.

18:51.210 --> 18:54.270
All we need is to make a timeline.

18:56.240 --> 18:58.460
And we'll call this glow timeline.

18:59.240 --> 19:05.480
We'll open it up, add a float track, call this glow track and add two points to it.

19:05.480 --> 19:06.470
Add one key.

19:06.470 --> 19:07.430
Add one key.

19:07.460 --> 19:11.990
The first one will be at time zero and have a value of zero.

19:11.990 --> 19:14.660
And then how long do we want this to go?

19:15.630 --> 19:20.850
Perhaps one second, and at one second we'll put it at one.

19:21.390 --> 19:24.240
I'm going to take both of my key points.

19:24.240 --> 19:28.650
Make this an auto curve so it's smooth and set the length to one.

19:29.100 --> 19:35.880
And in the event graph we're going to play the curve and take our glow track and set a dynamic material

19:35.880 --> 19:36.870
instance parameter.

19:36.870 --> 19:45.030
So let's reroute this around and set scalar parameter value.

19:45.980 --> 19:49.520
This will be on update the value it will be.

19:49.550 --> 19:51.350
We'll just try the glow track.

19:52.460 --> 19:53.960
And what is that parameter?

19:53.960 --> 19:55.040
It's called glow.

19:55.040 --> 19:57.710
And if I bring this up to one, what does it look like?

19:57.710 --> 19:58.220
Okay.

19:58.220 --> 19:59.060
It's glowy.

19:59.060 --> 20:04.820
We could bring it up a little bit more, maybe even 20, 30, 40.

20:05.720 --> 20:10.070
So for that reason I'm going to scale this by a number.

20:10.070 --> 20:11.300
We're going to multiply.

20:13.500 --> 20:17.640
We're going to promote that to a variable called glow factor.

20:18.240 --> 20:21.810
Set glow factor to a default of say, 20.

20:22.450 --> 20:27.670
And hook that in to value, and the parameter is called glow.

20:28.690 --> 20:29.710
Okay.

20:30.850 --> 20:34.480
So with that, we can try to overlap with this.

20:34.480 --> 20:37.150
And since we're testing, I'm going to bring it in close.

20:37.150 --> 20:39.610
So it's easier to find and reach.

20:39.610 --> 20:41.920
Doesn't take too long to go over there.

20:41.920 --> 20:46.780
I'm going to save all and just test out this glow effect.

20:47.760 --> 20:48.810
And there it is.

20:49.170 --> 20:52.740
So now we can see when we've reached it and it stays on.

20:52.740 --> 20:55.350
We don't get this triggered multiple times.

20:55.350 --> 21:00.120
We only get it the first time and it works.

21:01.380 --> 21:08.280
And the cool thing is this is a player start so we can use it and we can save the player start name

21:08.280 --> 21:09.480
that tag.

21:09.480 --> 21:15.060
If we want to save our progress at this particular player, start and we're going to handle doing that

21:15.060 --> 21:15.840
next.

21:15.990 --> 21:16.860
Great job.

21:16.860 --> 21:17.940
I'll see you soon.
