Simple Checkpoint System in Unity
Вставка
- Опубліковано 20 сер 2024
- Let's make a simple Checkpoint System perfect for any Racing Game or anything where you want the Player to go through a preset path.
✅ Get the Project files and Utilities at unitycodemonke...
🌍 Get my Complete Courses! ✅ unitycodemonke...
👍 Learn to make awesome games step-by-step from start to finish.
I made a Racing RTS! (Mix and Game Jam 2020)
• I made a RACING RTS in...
Toon Racing Asset Pack
assetstore.uni...
🌍 Get Code Monkey on Steam!
👍 Interactive Tutorials, Complete Games and More!
✅ store.steampow...
If you have any questions post them in the comments and I'll do my best to answer them.
🔔 Subscribe for more Unity Tutorials / @codemonkeyunity
See you next time!
📍 Support on Patreon / unitycodemonkey
🤖 Join the Community Discord / discord
📦 Grab the Game Bundle at unitycodemonke...
📝 Get the Code Monkey Utilities at unitycodemonke...
#unitytutorial #unity3d #unity2d
--------------------------------------------------------------------
Hello and welcome, I am your Code Monkey and here you will learn everything about Game Development in Unity 2D using C#.
I've been developing games for several years with 7 published games on Steam and now I'm sharing my knowledge to help you on your own game development journey.
You can see my games at www.endlessloopstudios.com
--------------------------------------------------------------------
- Website: unitycodemonke...
- Twitter: / unitycodemonkey
- Facebook: / unitycodemonkey
🌐 Have you found the videos Helpful and Valuable?
❤️ Get my Courses unitycodemonkey.com/courses or Support on Patreon www.patreon.com/unitycodemonkey
I love your videos
Can you make a video about air checkpoints
@@dyll8829 It's the same thing really, just move the colliders into the air
Can you do a video about cooking a torchic
💬 Simple yet very useful system! Guide the player on a Race Track or really on any path you want!
Stay tuned for a video on a Car Driver using Machine Learning and another one using Classic AI!
Watching this makes me think of all the MarioKart best time videos where they try to exploit the checkpoint system to finish the laps in a few seconds or so.
I am making a racing game and I was making a long script for resetting the vehicle until I saw this video. Loved it 😍❤❤
I'm pretty sure I'll be using this checkpoint system on every racing game I make from now until the end of time!! I tip my hat to you good sir!!
Awesome Mate! Another way to do this would be making a list of transforms for all the checkpoints on the track and when the player picks one you just set the position of the checkpoint to the next transform in the list and keep track of the checkpoint count and finally when the player reaches the last checkpoint you enable the lap checkpoint and for multiple laps you just repeat the same checkpoints starting from back from checkpoint one.
Oh my God. How I love the racing tutorial
Love the way you type
Ooh neat I've been wondering how to implement something like this
Recently I've seen an interesting approach: check which direction player EXITS the checkpoint. Then based on that can spawn/despawn things in a room and do all sorts of transitions pertinent to a zone.
Love This :D Interestign and good way of doing Chekpoint :D
i did it the lame way but it worked with tags(Chekpoint1,Chekpoint2,etc) hehe :D
Thanks for the great video and the very clear scripts.
Sir can give link of it
This is really cool to see you work in 3D
Shortly but surely you are moving forward with covering the topic we need to learn. 👌. Keep making more content.
howcan we place checkpoints procedurally
Can you make tutorial about ledge climb?
That would be interesting, I'd love to do some more 3D focused tutorials
Just had this idea,How about a video in which you review some of our code and try to compare it with your cleaner code? Maybe you could give us a programming challenge or something of that sort ,and then review that code...Seems like an interesting topic for a video!
That would be interesting but might be tricky to make into a video. I have thought about doing some playtesting/review of audience games.
@@CodeMonkeyUnity hmm 👍🏼
This was exactly what I needed like 1 month ago😅
Can you make an tutorial how to do a car position , 1º place , 2º place.....tks
Just add cars to a list as they pass the last checkpoint
There was a Mario Kart ad on the video
thank you for your hard work
Hey Monkey, im currently trying to figure out grabbing the checkpoint child objects and I have my find function, do I use the Container Objects name of the child objects name when using that particular function?
Thanks!!!!!
could do with typing a bit slower i can hardly keep up XD good tutorial though haha
Great tutorial thank you.
Your keyboard sounds like you are pressing down on a bowl full of small chunks of bones
For some reason the other.TryGetComponent(out Player player) doesn't work because the type or namespace 'Player' could not be found. What is the issue? I don't get it. Please help
The issue is you don't have any class named Player
@@CodeMonkeyUnity and how would I make that class? I'm working on a collaboration project and they already had controls and stuff for our player character car done.
@@CodeMonkeyUnity another issue is the right checkpoint wrong checkpoint part, for some reason my first checkpoint was read as the wrong checkpont, but my second one was the correct checkpoint
EDIT: turns out I needed to put the checkpointSingleList = new List();
code outside the foreach loop.
EDIT2: is there a tutorial that supplements this so I can get my car to respawn at the checkpoints?
@@kinlyki Im waaay late to reply to this but ive since learned that you need a script named "Player" which is attached to your car
Great video pal! Keep with this informative course, you are helping thousands!
Excellent and helpfull! I had some issues extending this with a finish but then realized I Could put the finishline (from where I start to ride) at the bottom of the index so it doesn't get triggered until a complete lap. Then do a check to see if all checkpoints where passed from the finishline with a extra script and it works!
Had to set the speed to 0.5, but it worked :)
Thank you.
hello, in the world of submarines game, how to do the movement mechanics? with constant speeds, and the system that marks the ship to fire the torpedo?
Fantastic tutorial. Exactly what I needed. So helpful.
hello, these tutorials are great! is there an updated version of this? I am having problems due to the torch and python versions used in these videos, also, is there any difference doing this on a Mac? thank you!!
When going from one CHECKPOINT to the other, the CONSOLE marks me as both correct and wrong, might you help me? Thanks
i get an error for foreach (Transform checkpointSingleTransform in checkpointsTransform)
{
CheckPointSingle checkpointSingle = checkpointSingleTransform.GetComponent();
checkpointSingle.setTrackCheckpoints(this);
checkpointSingleList.Add(checkpointSingle);
}
Object reference not set to an instance of an object
TrackCheckpoints.Awake () (at Assets/Scripts/TrackCheckpoints.cs:16) is my error i cant figure it out someone helpp DX
What's the solution ?
Try getting rid of the .Find bit it worked for me
13:58 I get this in the console, "ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index" Any suggestions on how to fix this?
Sounds like you're trying to access an index in an array that is larger than the size of the array
@@CodeMonkeyUnity I found the solution. I was actually populating the CarTransform list with the parent of the car, instead of the gameobject, which is a child of the parent gameobject, that contains the rigidbody and collider! 😅. Thank you for the tutorial, tho. Really amazing.!!!!
@@HK-Labs Getting same error, could you explain like I'm five?
1:59 Can anyone explain this if-statement, what does it actually check for?
It tests if the "other" object has a Player component/script, if so it returns true and assigns the player variable with the component.
So in this case it's used to identify if the player is the one that went through the collider.
@@CodeMonkeyUnity Thank you. I think its just that Im not familiar with "out" :D
@@CodeMonkeyUnity who should also enter the collider then the "player"? AI? other players? or other objects?
@@ScilexGuitar "out" means that parameter is an output parameter, so the variable that you pass in there will be modified by the function
@@CodeMonkeyUnity So what does the function "TryGetComponent" do to the passed in player variable in this case?
Hey I have a question, how I get a Vector3 for the last Checkpoint I have passed, because I want to reset my Car if I miss one Checkpoint to the last one ..
When I start the game, I get two problems.
1- NullReferenceException: Object reference not set to an instance of an object
TrackCheckpoints.Awake() (at Assets/CheckPointSystem/TrackCheckpoints.cs:12)
2- NullReferenceException: Object reference not set to an instance of an object
CheckpointSingle.OnTriggerEnter (UnityEngine.Collider other) (at Assets/CheckPointSystem/CheckpointSingle.cs:12)
I don't know why, but I did what you did, can you help me?
Use Debug.Log to find out what is null unitycodemonkey.com/video.php?v=5irv30-bTJw
this doesn't work for multiplayer does it? since the data is stored in the checkpoints instead of the player
In multiplayer you would use the same logic but only keep track on the server
Mr. Code Monkey! Thanks for the awesome video, maybe you can help with a problem I'm having?
I copied your code exactly but when any car other than the player controlled one goes through a checkpoint it says "ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index".
I've added the cars to the TrackCheckpoints list in the inspector
What line is throwing that error? Sounds like maybe you're not initializing the List of checkpoints at all, that error means the index you're using is < 0 or above the max amount
@@CodeMonkeyUnity int nextCheckpointSingleIndex = nextCheckpointSingleIndexList[shipTransformList.IndexOf(shipTransform)];
That's the line throwing the error. I think I am initializing the List of checkpoints in line 33 under the Awake function;
nextCheckpointSingleIndexList = new List();
It's odd because when my player controlled car goes through a checkpoint I get the Debug.Log showing "Correct", but when my AI controlled car goes through a checkpoint I get the "ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index" error.
@@OwzyBrand It strictly depends on what exactly you consider the Collider that interacts with the Checkpoint. In my case, it turned out to be a collider of a "Body" Game Object, hidden inside the prefab of a car itself. And Transform is transform of this Collider.
int nextCheckpointSingleIndex = nextCheckpointSingleIndexList[carTransformList.IndexOf(carTransform)];
This value should match the index of Collider element in Car Transform List
awesome!
Code Monkey you are best.
But i need realtime position show on screen (e.g. 1/8 - 5/8 etc.)
Just do some logic by taking the checkpointIndex of each car. A car on index of 3 is ahead of another one on index 1
is there a way to make sure the car goes through the checkpoint in a certain direction? like identify the collision on the first box edge -> second box edge and make sure they're in the right order...?
You can calculate the Dot product between the car forward and the checkpoint forward. If it's above 0 then they're both facing the same direction.
@@CodeMonkeyUnity Thank you! And extra additional thank you for all you've done and continue to do, your channel is invaluable! :)
@@CodeMonkeyUnity I don't exactly understand. Can you simplify that so I can make a car ai that won't drive backwards? (ironically enough I was doing it with your other video on mlagents)
You could use race track meshes triangles instead ;)
whats this :)?
@@DerPhiL it's not a one-click solution i can't explain it all
. But you won't have to add colliders manually with it.
I mostly stopped at around 7:20 since I need it for a single-player game, and once I added the TrackCheckpoints to an empty and added CheckpointSingle to all my CheckpointSingle objects, I get a "Object reference not set to an instance of an object" error.
You have something set to null, use Debug.Log to identify what ua-cam.com/video/5irv30-bTJw/v-deo.html
@@CodeMonkeyUnity TrackCheckPoint.PlayerThroughCheckpoint(this); is giving off a null for some reason. I think it's because my Player component doesn't have the ability to maybe get a variable? How would I go about doing this for the if statement of "TryGetComponent."
Check if you attached the scrip to the "Track" component. In my case I forgot to do it xD.
Can you show me how to make a lap system using the checkpoint?
Put the first checkpoint right on the beginning, when the checkpointIndex loops back then you have a full lap
Excuse me, but the serialize field for list of car transform doesn't really help me, as the number of cars spawned in my game are dependent on how many people connect to it. how do I make it so that the list is filled up based on the number of cars with the tag player?
It's just a list, whenever you spawn a new player just do list.Add(newPlayer);
I don't know what (out Player player) means, but I'm using a car controller in Unity.
The out keyword in C# lets you define a parameter that will be set to some value inside that function.
In the case of TryGetComponent it tries to find that component, if it finds it then it assigns it to the player variable.
@@CodeMonkeyUnity Here's an error: The type or namespace name 'Player' could not be found (are you missing a using directive or an assembly reference?
@@DavidThemanoy No Player Component inside your GameObject. Try to create an init.cs script and assign it to the player (no need to write anything inside that script) and then TryGetComponent(out init name). I hope it helps!
My Console does not print any message when using other.TryGetComponent one?
Maybe you forgot to add the component? Maybe the collision isn't triggering? ua-cam.com/video/Bc9lmHjqLZc/v-deo.html
I'm getting a Null Reference Exception at the foreach loop. help me pls
Add Debug.Log to find what is null unitycodemonkey.com/video.php?v=5irv30-bTJw
please help i copied the code at 2:16 but i get an error that says: Assets\MST_Creator\Car Controller For Unity\Scripts\death.cs(10,47): error CS0118: 'player' is a variable but is used like a type , how do i fix this?
Not sure what your code looks like but in the out parameter you should first write the type then the variable name. out Player player
You're using the "player" variable as a type somehow
Hello everyone i need help my ontriggerenter doesnt work not only it but triggerexit nor collison enter none of them works , idk why cant even debug.log, howerer right after declaring ontriggerenter function if i put ";" sign it does work but it registres everything goes through it
It worked in first try i needed to modify code to suit my project
I even created new project file it doesnt work there either
Please help
I made a video on collisions here ua-cam.com/video/Bc9lmHjqLZc/v-deo.html
Make sure you're not mixing 2D and 3D components
I was wondering what your thoughts are on how to best have vehicles move withing a city grid type layout in a basic RTS structure (left click select and right click move). Pretty safe to say that using the navigation component is out as it would cause the vehicles to go all over the road and not follow the simple right/left lane streets. Would using a system of connected nodes be best? I assume with that kind of system you would simply find the node closest to the right click input and just send the vehicle there.
Thanks for your time.
For a City Builder game? You'd probably use Splines to define the path on each side of the road and move the vehicles along the splines ua-cam.com/video/7j_BNf9s0jM/v-deo.html
@@CodeMonkeyUnity Funny, I just watched that video last night, seems like a great solution. In terms of coding, what would be the best way to organize the nodes in your opinion? Since there are intersections and the vehicle has different pathing options, perhaps some kind of tree nodes?
Thanks again.
If Player 1 goes through the wrong checkpoint (let's say they skipped checkpoint 5) won't both players see checkpoint 5 light up? Worse, if Player 2 also goes through a wrong checkpoint (let's say player 2 skipped checkpoint 4) won't both players see checkpoint 4 and checkpoint 5 glowing, and therefor not know which one to go through?
Yes, the logic is set up to handle multiple cars but not the visual. One way to handle that would be if all the other cars were driven by AI then for the visual you would only Show when the player car went through the wrong checkpoint.
I've just started something like this myself. Codes anyone know how to do a live wallpaper on android?
Hmm i was wondering would it be possible to use this in a multi scene game? Like if i want to save my character's progress thus far like in sekiro or dark souls
Sure, you can save the current checkpoint index before you go to a new scene
didn't work for me. :(. I'm using UNITY 2021.3.15f
What does "didn't work" mean? You have a compiler error? Runtime error? It doesn't behave as expected?
Just saying "didn't work" doesn't provide any info, theres nothing I can do to help if I don't know exactly what doesn't work
@@CodeMonkeyUnity No compiling errors. Just didn’t display anything in the console. :(
Hello. I've come to say that i did it. it worked. there were some mistakes i made, in the hierarchy. I'm sorry, for everything. thank you for this useful code. Now, that part where you showed how to make the system to support multiple cars, it gave errors, in my console.
Why cant my PlayerCar object get detected in this line? private void OnTriggerEnter2D(Collider2D collider)
{
if (collider.TryGetComponent(out PlayerCar playerCar))
{
}
}
is just underlined in red
Sounds like you don't have any class named PlayerCar
@@CodeMonkeyUnity oh a script sorry thought it was an object in the hierarchy
Anyone has a good blender tutorial? I suck at it and i need to learn it
How does anyone remember all of this?
It's not a question of memory, it's a question of understanding the logic behind how systems work. So I don't think "how did I do a checkpoint system before" I just think "ok I need some way of testing when the car goes through a point, then keep track of how many of those points, etc"
I seem to have an issue were when I go through a checkpoint the mesh renderer does not turn off (It does have mesh.enabled = false ). How do I fix this?
Maybe you have two mesh renderers on top of one another? Add Debug.Log(mesh); to see exactly what you're disabling
@@CodeMonkeyUnity I changed something in my code and it fixed my mesh renderer issue however it now says that the checkpoint is correct and wrong.
@@CodeMonkeyUnity I have fixed the issue. Thank you for helping
how would you setup a lap system
When the player goes through the checkpoint on index 0, it's a new lap
can someone help me, i cant the see the 'player' variable, it gives me an error, at 2:01, pls help i cant figure out why this happens
Then it sounds like you don't have any class in your game named Player
@@CodeMonkeyUnity where do i have to put the player class?
@@nitro5gaming463 Inside your Player or Car Gameobject.
how can i sort racers position by checkpoint?
just get which checkpoint is their next and compare
hi Monkey, at 2:13 whats the difference between what you using and if you just used a tag as in if (other.gameobject.tag == "Player") ?
Tags are based on strings which are very error prone, if you accidentally type "player" everything will break and it will be tough to find out why. Not to mention they're pretty costly in terms of performance.
You should always avoid using strings whenever possible.
@@CodeMonkeyUnity thanks Monkey...you the best
Just one question. Will there be a Multiplayer Series?
I'd like to cover it but no idea when
noice
I really like the control mechanics. Do you have a course on making this game? I am ready to buy it to repeat it in my game.
Does It work in multiplayer?
Not sure what you mean by that, there's nothing here related to single or multiplayer, it's just physics and basic logic. You could run this logic both on a server and a client
@@CodeMonkeyUnity Thanks Man!
This seems complicated for me sorry, (I'm only doing my 3rd Unity unit in Uni), I thought it would be simple to have a checkpoint gameobject that is a floating totem (like a collectible) and if you get in the radius, you've hit that checkpoint, then u go get the other one
Problem is, not knowing how to do the radius, then also record and output at the end of the game the time stamp of when the checkpoint was reached, and making it have a "indicator that lights up when its active, dims when the checkpoint is inactive"... idk.
Where can i have car controller please ?
Asset Store there are free ones too
@@jamesxxxyz8775 exemple?
This man is not teaching - he is just promoting himself.
What part of the video did you find lacking? It covers the entire Checkpoint System starting from a completely empty script, what else were you looking for?
@@CodeMonkeyUnity The video was VERY useful, just ignore the trolls always wanting to hate on everything
May you please do a mission waypoint tutorial? I've been trying to make a waypoint system for a long time, but I can't figure it out.
Something that points to a target? I made that here ua-cam.com/video/dHzeHh-3bp4/v-deo.html
@@CodeMonkeyUnity Yes, thank you!
Alakasız ama merak ettim,code monkey izleyen başka türk var mı?
(If you don't understand just ignore that comment)
ben varım
Sir can u give me script 😅
Sir pls reply 😔🥺
There's a link in the description
@@CodeMonkeyUnity Please validate your email to download files
Sir pls help me