No joke, especially when this is my first time hearing his voice (not that it's bad at all just it wasn't anticipated) ...And I came back. For some foolish reason I thought I could follow through at 0.25 speed and You. Were. Not. Joking.
To anyone having the player enemy fall or disappear... Make the empty Game Object that you put the Nav Mesh Surface on not a child object of your enemy. This worked for me, Best of luck!!!
Its easier for people who need it slower, to pause after he says something, than it is for people who need it faster, to try to jump ahead through long silences, or useless chatter.
@@Nebulaoblivion my point being that if I make a video saying "make something in 6 minutes" but really I've just cut everything together in 6 minutes of video but the actual process takes hours and I also have to rewatch that 6 minute video 10 times to try and catch things due to you flying through it. Then the title is a lie, it has nothing to do with the pacing of the tutorial and everything to do with the claims of the title.
This tutorial is definitely one of the bests. The only thing I would probably add is the idling function. That way the enemy would stop for a sec or two instead of constantly running around
@@MrNPCTHE THIRD CODE if (Time.time < lastDidSomething + pausetime) return; HAS A ERROR SMALL T IN WORD PAUSETIME. THE CORRECT ONE IS if (Time.time < lastDidSomething + pauseTime) return; JUST IN CASE SOMEONE WANT TO USE IT AND IS NOT WORKING,
@@justgix7165 You go to your Packet Manager under 'Window' at the top. Then you select 'Unity Registry' insted of 'In Project' or 'My Assets' and search for the Nav Mesh Package. And then you install it.
@@davegamedevelopment Hi sir please help me, actually i don not know how to downloaded the project from discord server. So I requested to you kindly tell me how to downloaded it🙏🙏🙏
Amazing tutorial, thank you!! Adding in notes on snags I hit for future reference: How To Add/Set Layer Masks: (1) Click on your game object, in inspector on the upper right is the Layer dropdown. Add twhatIsGround/Enemy/etc as new layers and set accordingly Enemies Not Moving: (1) Make sure your ground and player objects have colliders Projectile Problem: (1) Make sure your projectile has a Rigidbody component added Adding NavMesh Components: (1) You can now add them directly via Unity's Package Manager. Go to Window -> Package Manager -> Packages -> AI Navigation and install that
what. a. timeless. tutorial. literally as i write this comment this tutorial work even after 4 years later.. thanks unity for making such beginner friendly engine and thanks to you for making such comprehensible tutorial!
If you followed this tutorial and your Player is not recognised by the enemy so it never goes toward the player, it might be because your player doesn't have a collider. So, add a capsule collider or something like that to your player it could fix it. I've been struggling with that the past 15 min 😁
@@partishdarji26 Hopefully this is not too late. The "Projectile 4" is whatever you want the enemy to instantiate. In the video, it was made into a prefab named Projectile 4.
This tutorial is amazing even if am not using unity, really opened up one thing i overlooked separating chase range and attack range .thanks for the breakdown of the base of ai before expanding how smart it behaves .just subbed
This is how most of tutorials should be! I love everything about it. Directly to the point and explaining just what is needed. Awesome job and Thank you!
Absolutely fantastic tutorial video! I found it absolutely invaluable as a starting point for creating my first Enemy AI. And I expanded it by adding behavior for patrol paths/waypoints, as well as definable 'Idle time' between WalkPoints, combined with a bool option to randomize idle time as well. :)
Hey just wondering how did you make that Idle time between walkpoints? I’m using a slime that jumps around randomly but also stops at times so i would like to have an idle function for it.
@@KoopaD.WaterTroopa Simple really. I create a standard timer variable ie: "Timer -= Time.deltaTime;", that runs in the Patroling function, under "if (distanceToWalkPoint.magnitude < 1f)" Then once the timer has hit zero, I allow "walkPointSet = false" to execute, triggering the AI to find a new walkpoint again. And to finish off I reset the timer when it executes FindWalkPoint();. You can either set the timer variable as a fixed value, or you can call the Random.Range(); function for more unpredictable behavior. I hope that made some sense. :)
WARNING to all new watchers: Dude explains the tutorial absolutely excellently but kind of drops the ball when it comes to the last minute. 1. have to assign layers names yourself. 2. the empty he talks about at 5:00. you need to add the nav mesh surface to the ground. 3. if your enemy is falling through the world, either your raycast code to check if the enemy is grounded doesn't work or your ground/terrain doesn't correctly have a nav mesh surface. Hope this helps, otherwise it's a really good tutorial!
I have a weird, but small issue. When the enemy is attacking, the bullet spawns but it won't turn with the enemy. So it begins firing when I enter the attack range, but it's never facing me and never updates to my current position.
I just did I added spawn point to a code I have and called in before transform.position .. instead of transform.position I used (spawnPoint.transform.Position)
Dave if you continue creating videos like this one you will be the next Brackeys on TH-cam or even bigger, congratulations and thanks for this amazing content. 👍
There are a few changes I made to this. The AI needs to make sure that the path is complete before chasing or attacking the player. Otherwise, it will walk and float across gaps, walk through walls, and attack through walls. For enemies that shoot projectiles, I made them raycast towards the player to see if the player is within their line of sight, and if they don't see the player, they move closer until they can actually hit the player with the projectile. Otherwise, they get stuck trying to shoot a player from behind a wall.
Click on your enemy object, select the Layermask dropdown in the top right of the inspector (It should say "Default" there), then make a new Layermask called "whatIsEnemy" and make sure to select it instead of "Default" (on all your enemies) :D
@@thenoseguy depends on your use case. If you gonna have a lot of enemies - ditch built-in agent agent system, its slow and runs on main thread. Use pathfinding solution. There are various ok asset store and a lot of info online on implementing your own. Physics.Overlap is gonna be Hella slow with big number of enemies, you can use quad/oct/k trees to optimising distance checks. There's also numerous tutorials for that online. For patrolling/chasing/ whatever use state machines or behaviour trees for advanced use cases. If your game is small enough and you have room for performance load, you can use this and it'll be fine
I have 2 issues. One the enemy doesn't patrol it just kinda stands there. the walkpoint keeps changing but the enemy doesn't move. Also when the enemy reaches a certain point it just stops and refuses to move. Any help would be great.
This reply is for new watchers. Add This so it doesn't happens to you. " if (Physics.Raycast(walkPoint, -transform.up, 2f, whatIsGround)) walkPointSet = true;" In this view " 2f" is missing.
Great tutorial, I followed all the steps but I have a slight issue. I made a capsule just so I can test it out, but it isn't moving. I copied and pasted the code and followed everything but I don't know what I could've missed. when I add the random walk, it does work.
@@davegamedevelopment Hi sir please help me, actually i don not know how to downloaded the project from discord server. So I requested to you kindly tell me how to downloaded it
btw u should do it like this: make it so if the enemy sees you with their own eyes with raycast and that they are in range of the sight, this would be infinitely more realistic.
for anyone whos enemy is falling thru the floor, click window, ai, navigation, and then select the floor and anything else u want the enemy to walk on, then click bake and it should work
My enemy is going down the ground when I go close to him, I tried playing with navigation settings, adding collider, adding rigidbody and non of these worked, any solution please? Also I have no console errors.
I altered this to make an enemy that walks between its start point and a given point, after chasing and losing sight of you it returns to its start point.
Thanks for the tutorial but I have one question. When the enemy comes in sight it flies towards me and I keep getting this error: "SetDestination" can only be called on an active agent that has been placed on NavMesh.
remember you need to creat a new empty GameObject and then add the component NavMeshSurface. In the NavMeshSuface, you have to bake your terrain or ground data.
Amazing tutorial, but I was wondering how could a speed variable be implemented in the ChasePlayer function, so that different enemies may have different speeds
if im right, you could do something like this: first make int ,string,scriptable object or anything that you could choose depending what "type of enemy you want". then do something like this public int enemyType; void Update(){ if(enemyType==1)agent.speed=1f; if(enemyType==2)agent.speed=2f; if(enemyType==3)agent.speed=3f; } then make prefab for enemy type 1,2 and 3(remember to change enemytype from the prefab )
Thanks for the idea, maybe I'll do that somewhen :D But with a bit of tweaking, you could split the attack state into "attack", "defense" and "approach". You only need to come up with some sort of logic when the enemy should do what :D
@@iggythemad For strafing just add transform.LookAt(player.transform) and move the enemy to the "transform.right" direction. By always looking at the player and walking right the enemy should walk in circles around the player :D
@@iggythemad No problem, I think you should be able to use NavMeshAgents combined with other movements, just make sure to use the agent.ClearPath() function, otherwise the navMesh agent is constantly trying to get to the player :D
This was excellent. Clean, simple and concise explanation of how to use Unity's NavMeshAgent system. I've already got a 3D model of this demon-lord looking creature with movement and animation controls programmed, even did the IK adjustments to keep his feet perfectly on the terrain. Now I need to implement AI agents to control enemies and this showed me how to get that working. Gonna start with one simple ranged attack spell then hook up the whole game system for spells and weapons to AI agents based on what attacks they're able to use. 😄
@@innerbladet was more of a game prototype I was making migrating from DirectX to Unity and learning how things worked in Unity. I ended up getting hired by a company a couple months later to do this stuff in a commercial game. Unity is really easy if you've ever worked with OpenGL or DirectX and built small engines to power your own games. 80% of the hard work is done for you already and you only have to create the game. 🙂
Nice! I spent a long time doing the detection, I wanted it to be like if the player is out of sight the enemy will move to where he was last seen, it took a long time because it was the raycasts being dumb, *nice tutorial tho*
Hey, so I'm completely new to coding and unity in general, and I'm having issues with my enemy falling through the map extremely quickly, and it says the walk point is what I'm assuming is the position of the entity. Any idea why?
Not sure what I am doing wrong, I downloaded your code and named layers to WhatIsEnemy, WhatIsGround etc. yet the layer masks are not working. I only have a ground to mask with right now so I gave it WhatIsGround and baked it. I have all the imports right in the Nav Mesh Agent yet the object is still falling through the ground. Originally the enemy was floating on the y axis, but now it is just falling through the ground.
Hello Dave, great video! I followed this tutorial for a game where a monster chases a first person player. Everything works great except the patrolling. I can see it setting new walk points in the inspector, but the monster does not go to them. Any idea how to fix this? Thanks!
Its most likely because the walkpoint is being set at a point that is unreachable. You should set a timer for the walkpoint instead of the walkpoint changing when one was reached
followed this exactly and when i tried to play it he plummeted the earth at 350 mile per hour Edit: found the problem and it was how close he was to the ground just get him closer to the ground and it should work
Great tutorial, but one big thing is missing. Sometimes the random walkpoint is set in a wall or some obstacle and the "AI-Object" doesn't move and is stuck....
@@001Camera Hey Set the roads sidewalks or any ground area to the Layer Ground don't set the walls and other objects like building or mountains to Layer Ground
I literally just straight up assumed you ripped one of Brackey's videos I was so confident that was his voice! It's funny how two game development people on youtube sound so similar lol, thank you for the video!
Hello, thanks for the tutorial. Im very new to all this so im struggling a little. I made a sphere as the enemy, and i gave it all the scripts and stuff. I followed the tutorial until 5:27 basically. But my enemy is not moving, and it just shoots whenever it wants. it shoots at the player which is good, but i basically have a turret with infinite range in my game. How can i make the sphere actually move and act like an enemy? Also why does it just ignore the sight radius and stuff. (i dont have any errors in my console)
my enemy keeps shaking like it's drunk, and when i shoot it with a force, it goes back to the place it was before and continues to be drunk. what in the world is happening
my enemy randomly sinks through the map edit: what i mean is that the Y value is going crazy - it will move a bit to the left, then shoot downwards in the space of around a millisecond as soon as the game starts, without travelling there. It just instantly warps below the map. I am using terrain that is very mountainous as the ground layer, though. maybe that is the problem? could you help me please? edit 2: the same thing happens with the exact same ground that you are using.
I'm having the same problem, the only thing that is different after changing stuff up(So that he dosen't fall down) is that my enemy won't move a bit ;/
Can someone help me out if n put the NavMeshSurface on an object it doesnt show me the same menu Theres an empty slot called NavMeshData and an agent type ID Edit and no bake option
hey dave i'm working on a 2d top down shooter and i'm using your script from the first projectile gun tutorial without reloading,the bulletsleft and the ray. when i do a burst gun instead of firing like RATATA, RATATA, it fires like RATATATA, RA, RATATATA, RA, maybe because it invokes resetshooting also with the burst projectiles. i'm also always shoting when i use the right analog because it moves with the left joystick and rotates with the right joystick. here is my code. can you help me?? using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class player : MonoBehaviour { //general Rigidbody2D rb;
//movement public float movespeed; Vector2 movement; public FixedJoystick movejoystick; //rotation public float rotatespeed; public Joystick rotatejoystick; //shooting public GameObject bullet; GameObject bulletshotted; public Transform head; public float bulletspeed; public bool readytoshoot; public float timebeetweenshooting; public guncontainer gun; public int bulletspertap; public int bulletsshot; public float timebtwnshots; public bool allowinvoke; void Update() { //movement float horizontal = movejoystick.Horizontal; float vertical = movejoystick.Vertical; movement.x = horizontal; movement.y = vertical; //rotation Vector3 movevector = (Vector3.up * rotatejoystick.Horizontal + Vector3.left * rotatejoystick.Vertical); if (rotatejoystick.Horizontal != 0 | rotatejoystick.Vertical != 0) { transform.rotation = Quaternion.LookRotation(Vector3.forward, movevector); } //shooting if (rotatejoystick.Horizontal != 0 && readytoshoot || rotatejoystick.Vertical != 0 && readytoshoot) { Shoot(); bulletsshot = 0; } timebeetweenshooting = gun.timebetweenshooting; bulletspertap = gun.bulletspertap; timebtwnshots = gun.timebtwnshots; } void FixedUpdate() { rb.MovePosition(rb.position + movement * movespeed * Time.deltaTime); } public void Shoot() { if (bulletsshot < bulletspertap) Invoke(nameof(Shoot), timebtwnshots); readytoshoot = false; bulletshotted = Instantiate(bullet, head.position, head.rotation); Rigidbody2D bulletrb = bulletshotted.GetComponent(); bulletrb.AddForce(head.up * bulletspeed * Time.deltaTime, ForceMode2D.Impulse); Destroy(bulletshotted, 2); bulletsshot++; if (allowinvoke) { Invoke(nameof(Resetshooting), timebeetweenshooting); allowinvoke = false; }
Great video but for me they just fall right through the floor, i did everything correctly with baking but it just doesnt work any idea on what the issue could be?
Hey @Toasted! Try going to your bot’s inspector and adding a NavMeshAgent to it. For best results, change the speed to 2, the acceleration to 20, and the Obstacle Avoidance Radius to 2 as well. Hope this works for you!
I was almost in tears listening to your voice because Brackeys has taken a break from youtube
😢😢😢😢😭😭😭😭
No he's done for good :'(
same buddy :(
"Good-bye and thanks for everything" doesn't sound remotely like a break tbh.
i was in tears listening to his voice for entirely different reasons..... :((((((
@@monkeyrobotsinc.9875 i guess feeling overwhelmed with how complicated coding seems? for me that was it
whoever followed through this tutorial without pausing the video once is a god
No joke, especially when this is my first time hearing his voice (not that it's bad at all just it wasn't anticipated)
...And I came back. For some foolish reason I thought I could follow through at 0.25 speed and You. Were. Not. Joking.
yeah, either this guy sped the video up so he could make the title "AI in 6 minutes" or he's just that fast, that's crazy.
@@P4rz1va1 it says 6 mins but it took me an hour to follow along, was a painful experience.
I paused every 5 seconds
The idea is to watch the video without doing anything, and then after watching it, try to do it yourself. Then it is possible.
I feel like this guy might be our Brackeys from now on
But not for beginners
@MissYouBrackeys
spam this line
never >:(
@@KingTubeAR programmer moment
To anyone having the player enemy fall or disappear... Make the empty Game Object that you put the Nav Mesh Surface on not a child object of your enemy. This worked for me, Best of luck!!!
Thanks man. I’ve had so much trouble trying to figure that out
thanks! this really helped!
Thank you so much!!!!!
so do we make it a parent>?
Thanks dude!!
"in 6 minutes" ... *does tutorial in hyper speed*
Jup kinda hard to understand though like 10 minutes would have bbeen great
Kinda the point tho
Slow the speed of video
Its easier for people who need it slower, to pause after he says something, than it is for people who need it faster, to try to jump ahead through long silences, or useless chatter.
@@Nebulaoblivion my point being that if I make a video saying "make something in 6 minutes" but really I've just cut everything together in 6 minutes of video but the actual process takes hours and I also have to rewatch that 6 minute video 10 times to try and catch things due to you flying through it. Then the title is a lie, it has nothing to do with the pacing of the tutorial and everything to do with the claims of the title.
This tutorial is definitely one of the bests. The only thing I would probably add is the idling function. That way the enemy would stop for a sec or two instead of constantly running around
Can u tell me how to implement that ?
@@MrNPCTHE THIRD CODE
if (Time.time < lastDidSomething + pausetime) return;
HAS A ERROR SMALL T IN WORD PAUSETIME. THE CORRECT ONE IS
if (Time.time < lastDidSomething + pauseTime) return;
JUST IN CASE SOMEONE WANT TO USE IT AND IS NOT WORKING,
How does one get the nav mesh agent
@@justgix7165 You go to your Packet Manager under 'Window' at the top. Then you select 'Unity Registry' insted of 'In Project' or 'My Assets' and search for the Nav Mesh Package. And then you install it.
Bruh 6 minutes......im new to C# and I understood that perfectly, you're a fucking beauty
Haha thanks! :D
iam new too but i dont understand anything as alwyas :D but Daves tutorials are great :DD
it was so fast I had couldn't type anything of my own or Dave's code without having to pause or slow down to 0.5, and I type at god speed...
@@davegamedevelopment Hi sir please help me, actually i don not know how to downloaded the project from discord server. So I requested to you kindly tell me how to downloaded it🙏🙏🙏
@@Your_Sourav. same
Amazing tutorial, thank you!!
Adding in notes on snags I hit for future reference:
How To Add/Set Layer Masks:
(1) Click on your game object, in inspector on the upper right is the Layer dropdown. Add twhatIsGround/Enemy/etc as new layers and set accordingly
Enemies Not Moving:
(1) Make sure your ground and player objects have colliders
Projectile Problem:
(1) Make sure your projectile has a Rigidbody component added
Adding NavMesh Components:
(1) You can now add them directly via Unity's Package Manager. Go to Window -> Package Manager -> Packages -> AI Navigation and install that
Thanks!
Best Tutorial for Enemy AI on TH-cam
Thanks a lot! :D
agree
definetly
what. a. timeless. tutorial.
literally as i write this comment this tutorial work even after 4 years later.. thanks unity for making such beginner friendly engine and thanks to you for making such comprehensible tutorial!
If you followed this tutorial and your Player is not recognised by the enemy so it never goes toward the player, it might be because your player doesn't have a collider. So, add a capsule collider or something like that to your player it could fix it. I've been struggling with that the past 15 min 😁
thank you for the tip it realy helps👍
I found it was because my player wasn't named "playerobj"
so I went to the script and changed it to the name of the player
@@rprivateaccount5167 me too
well what if he just goes up to the sky
If anyone is having trouble with the baking section you just have to set the areas you want to bake to static in the inspector.
thank you brotha was being so confused to what I was doing and y it wasn't baking lol ty tyty
hey!
can u tell what is projectile 4 and how to attach it???
@@partishdarji26 Hopefully this is not too late. The "Projectile 4" is whatever you want the enemy to instantiate. In the video, it was made into a prefab named Projectile 4.
@@aokutor well thx for ur reply but i already got it!
This tutorial is amazing even if am not using unity, really opened up one thing i overlooked separating chase range and attack range .thanks for the breakdown of the base of ai before expanding how smart it behaves .just subbed
This is how most of tutorials should be! I love everything about it. Directly to the point and explaining just what is needed. Awesome job and Thank you!
What about the fact he go faster den SANIC.
Slow the speed of the video
yeah if "just what is needed" is "nothing at all"
I don't understand only one thing.... HOW ARE YOU SO GOOD?!
Haha thanks, but I'm not that good :D You can learn that too, just keep watching tutorials :D
@@davegamedevelopment i learned c# now
@@gaminganimator-qp2ir Nice
@@davegamedevelopment but gotta learn more:)
Same
I keep coming back to this one. surprisingly simple, surprisingly effective.
Absolutely fantastic tutorial video! I found it absolutely invaluable as a starting point for creating my first Enemy AI. And I expanded it by adding behavior for patrol paths/waypoints, as well as definable 'Idle time' between WalkPoints, combined with a bool option to randomize idle time as well. :)
Hey just wondering how did you make that Idle time between walkpoints? I’m using a slime that jumps around randomly but also stops at times so i would like to have an idle function for it.
@@KoopaD.WaterTroopa Simple really. I create a standard timer variable ie: "Timer -= Time.deltaTime;", that runs in the Patroling function, under "if (distanceToWalkPoint.magnitude < 1f)" Then once the timer has hit zero, I allow "walkPointSet = false" to execute, triggering the AI to find a new walkpoint again. And to finish off I reset the timer when it executes FindWalkPoint();. You can either set the timer variable as a fixed value, or you can call the Random.Range(); function for more unpredictable behavior. I hope that made some sense. :)
Yooo, just wondering how you made the waypoints / patrol paths to work with the code. Beginner coder here bahaha
WARNING to all new watchers:
Dude explains the tutorial absolutely excellently but kind of drops the ball when it comes to the last minute.
1. have to assign layers names yourself.
2. the empty he talks about at 5:00. you need to add the nav mesh surface to the ground.
3. if your enemy is falling through the world, either your raycast code to check if the enemy is grounded doesn't work or your ground/terrain doesn't correctly have a nav mesh surface.
Hope this helps, otherwise it's a really good tutorial!
This channel is so underrated
Thanks! Glad you like the videos! :D
@@davegamedevelopment brakeys 2.0
I have a weird, but small issue. When the enemy is attacking, the bullet spawns but it won't turn with the enemy. So it begins firing when I enter the attack range, but it's never facing me and never updates to my current position.
i have same. how did you fix this?
@@micol04 Never did.
I just did
I added spawn point to a code I have and called in before transform.position .. instead of transform.position
I used
(spawnPoint.transform.Position)
It spawns from wherever you put the spawn point game object irregardless of where it turns
Use quaternion also instead of rotation
Mans types so fast visual studio can’t keep up
I look away for one second and it's already the next video.
Great tutorials btw.
Haha thanks :D
Damn right to the point. Very nice tutorial. You didn't waste a moment. Thx for this tutorial.
Glad you liked it! :D Thanks for watching
did it work for you? if so I need help. my enemy just stands there and does nothing I have no errors. pls help
The “Nav Mesh Surface” script doesn’t appear the same way yours appears. Any way to fix?
write your own script based on the logic of enemies. I don't see any other solution🥲
Did you install the package?
Dave if you continue creating videos like this one you will be the next Brackeys on TH-cam or even bigger, congratulations and thanks for this amazing content. 👍
His voice is definitely Brackeys
There are a few changes I made to this. The AI needs to make sure that the path is complete before chasing or attacking the player. Otherwise, it will walk and float across gaps, walk through walls, and attack through walls. For enemies that shoot projectiles, I made them raycast towards the player to see if the player is within their line of sight, and if they don't see the player, they move closer until they can actually hit the player with the projectile. Otherwise, they get stuck trying to shoot a player from behind a wall.
This is a brilliant tutorial, but I'm stuck on the layer masking. I've never done it before, how do I go about creating them properly?
Click on your enemy object, select the Layermask dropdown in the top right of the inspector (It should say "Default" there), then make a new Layermask called "whatIsEnemy" and make sure to select it instead of "Default" (on all your enemies) :D
@@davegamedevelopment Worked a treat, thanks!
I am confused about this as well!
I can't find the layermask
Nice script for enemy AI to completely kill all your hope for any tiny bit of performance as soon as your number of enemies is above 10. Good job
So how do you fix it?
@@thenoseguy depends on your use case. If you gonna have a lot of enemies - ditch built-in agent agent system, its slow and runs on main thread. Use pathfinding solution. There are various ok asset store and a lot of info online on implementing your own. Physics.Overlap is gonna be Hella slow with big number of enemies, you can use quad/oct/k trees to optimising distance checks. There's also numerous tutorials for that online. For patrolling/chasing/ whatever use state machines or behaviour trees for advanced use cases. If your game is small enough and you have room for performance load, you can use this and it'll be fine
Hey, it shows me an error at line 31: Object Reference not set to an Instance of an object? and my ai doesnt move, how do i fix those things?
have you made sure to reference the object its missing in the editor? If you want you can msg me on discord for more help. Fezza#4066
had a little trouble with figuring out layers but got it working after a little more research :) Thanks dude!
Im having trouble with the layers showing what did you do?
@@mregghead9521 Same here bro, did you find any solutions?
@@mregghead9521 any of you got it working?
plz help
Your channel looks very very good, your voice reminds me brackeys too hahaha
Haha, thanks a lot! :D
@@davegamedevelopment wait are u .................................
@@gaminganimator-qp2ir no, his voice seems a bit too deep as well as the fact that brackeys was well serious about leaving TH-cam.
dude don't stop making videos you have some amazing content that A LOT of people can learn from
I don't know if you still read these but thank you!! this helped me so much. it was straight the point no chitter chatter. Greate video.
I have 2 issues. One the enemy doesn't patrol it just kinda stands there. the walkpoint keeps changing but the enemy doesn't move. Also when the enemy reaches a certain point it just stops and refuses to move. Any help would be great.
happens same to me
This reply is for new watchers. Add This so it doesn't happens to you. " if (Physics.Raycast(walkPoint, -transform.up, 2f, whatIsGround))
walkPointSet = true;" In this view " 2f" is missing.
@@manishshrestha4263 what should i do?
@Chocolade YT It is posible your ground is not on the "WhatIsGround" Layer
For anyone has their AIs not patrolling, assigning the value walkPointRange will fix this problem
Great tutorial, I followed all the steps but I have a slight issue. I made a capsule just so I can test it out, but it isn't moving. I copied and pasted the code and followed everything but I don't know what I could've missed. when I add the random walk, it does work.
What do u mean by Random walk?
This tutorial really helped! Thanks! I am working on FPS AI and a can't tell you how much this helped! Thumbs up!
Glad I could help!
@@davegamedevelopment Hi sir please help me, actually i don not know how to downloaded the project from discord server. So I requested to you kindly tell me how to downloaded it
I love your video style and clear code. Subscribed!
Thanks a lot!
btw u should do it like this:
make it so if the enemy sees you with their own eyes with raycast and that they are in range of the sight, this would be infinitely more realistic.
Yea thats what I need to be honest
Look into coroutines instead of invoking. Gives so much more flexibility and invoking is also more expensive. Amazing tutorials as always.
for anyone whos enemy is falling thru the floor, click window, ai, navigation, and then select the floor and anything else u want the enemy to walk on, then click bake and it should work
how to select the floor???
@@time133 click it? im not sure what you mean
@@time133 after you click navigation, you should be able to select the floor and then it will appear on the right, and then you click bake
My enemy is going down the ground when I go close to him, I tried playing with navigation settings, adding collider, adding rigidbody and non of these worked, any solution please? Also I have no console errors.
@@potato1947 same 😭
Thank you, even helped out in the discord.
Awesome tutorial! This worked out amazing in my game.
Glad to hear that!
ur really amazing iam
really looking forward for ur next tutorials !!
Thanks, appreciate it!
I altered this to make an enemy that walks between its start point and a given point, after chasing and losing sight of you it returns to its start point.
Please, would you mind to share how you did it? TY in advance
Hey Dave! rlly good tutorial, but how can i import the navmesh components, how does that work?
hmm... the NavMeshSurface doesn't have the baking options or most of the others you have /: pls help
Did you import the nav mesh components correctly? :D
@@davegamedevelopment how do you import the nav mesh components correctly?
Make sure your GameObject is set to Static. Your NavMesh surface should be static to bake.
Great tutorial man, it’s a big help cause I’m very new to enemy ai
Thanks for the tutorial but I have one question. When the enemy comes in sight it flies towards me and I keep getting this error: "SetDestination" can only be called on an active agent that has been placed on NavMesh.
Make sure you select navigation and bake
remember you need to creat a new empty GameObject and then add the component NavMeshSurface. In the NavMeshSuface, you have to bake your terrain or ground data.
I really like this because it's the only Tutorial I have found where ai patrols without multiple patrol points
Glad I could help!
How do you download the nav mesh
Maybe you know it already but it's ai navigation in the package manager.
Amazing tutorial, but I was wondering how could a speed variable be implemented in the ChasePlayer function, so that different enemies may have different speeds
You can change the speed in the navmeshagent settings
if im right, you could do something like this: first make int ,string,scriptable object or anything that you could choose depending what "type of enemy you want". then do something like this
public int enemyType;
void Update(){
if(enemyType==1)agent.speed=1f;
if(enemyType==2)agent.speed=2f;
if(enemyType==3)agent.speed=3f;
}
then make prefab for enemy type 1,2 and 3(remember to change enemytype from the prefab )
thats how you could make the ai have stamina and start walking when stamina is low, hope that you understand what i mean with that
this tutorial is underrated asf
This is great! Straight to the point. I have a request please
Thanks for the idea, maybe I'll do that somewhen :D
But with a bit of tweaking, you could split the attack state into "attack", "defense" and "approach". You only need to come up with some sort of logic when the enemy should do what :D
@@davegamedevelopment my main problem is how to make the ai strafe around, or move nearby the player, instead of just staying immobile infront of him.
@@iggythemad For strafing just add transform.LookAt(player.transform) and move the enemy to the "transform.right" direction. By always looking at the player and walking right the enemy should walk in circles around the player :D
@@davegamedevelopment why didnt I think of this... i thought i had to use the navmesh or something
@@iggythemad No problem, I think you should be able to use NavMeshAgents combined with other movements, just make sure to use the agent.ClearPath() function, otherwise the navMesh agent is constantly trying to get to the player :D
THIS IS AMAZING! Don't stop making these tutorials.
Thanks a lot! And well... I did stop :D
But from now on I'll be uploading regularly again!
There no navmeshagent for me and it is driving me insane
I think you have to install it in the package manager.
Yeh it is not in package management for me
Thankyou , this script acts as a nice base to build upon more complex behaviours.
Glad I could help! :D
This was excellent. Clean, simple and concise explanation of how to use Unity's NavMeshAgent system. I've already got a 3D model of this demon-lord looking creature with movement and animation controls programmed, even did the IK adjustments to keep his feet perfectly on the terrain. Now I need to implement AI agents to control enemies and this showed me how to get that working. Gonna start with one simple ranged attack spell then hook up the whole game system for spells and weapons to AI agents based on what attacks they're able to use. 😄
Sounds like a Great game in development
@@innerbladet was more of a game prototype I was making migrating from DirectX to Unity and learning how things worked in Unity. I ended up getting hired by a company a couple months later to do this stuff in a commercial game. Unity is really easy if you've ever worked with OpenGL or DirectX and built small engines to power your own games. 80% of the hard work is done for you already and you only have to create the game. 🙂
@@GameDevNerd thx for the tips and hope everything goes good for you
do you know how to get nav mesh
Nice!
I spent a long time doing the detection, I wanted it to be like if the player is out of sight the enemy will move to where he was last seen, it took a long time because it was the raycasts being dumb, *nice tutorial tho*
The voice is the same with Brackeys?
Haha no, only sounds similar :D
Best youtube on Game Dev hands down. Especially now that Brackeys gone, you will grow even more
There is no Bake Button.. I cant bake
Bet your soft is absolutely amazing! Never give up
This is Brackeys Channel. I think He is doing Side Business from this channel.... hahaha . Exact As Brackeys
The only thing I can say about this video is you've got a new subscriber :)
Thank You, This really helped me learn more about NavMeshAgents. I modified the code and used it to make an AI for my Game.
Glad I could help!
Dave the enemy's aren't shooting with me how do i fix this aside that a great tuturial
Sorry, I have no knowledge on this, what you can try is re-watching the tutorial to check for errors or try a new tutorial.
probably because your player tag is not the same as in the script
This boi is helping me so much. You are amazing
Hey, so I'm completely new to coding and unity in general, and I'm having issues with my enemy falling through the map extremely quickly, and it says the walk point is what I'm assuming is the position of the entity. Any idea why?
Do you have an active rigid body on the enemy? Because if it’s just falling through then maybe the collision is off
Same I’ve been fiddling with it for a while now and it just keeps happening, not sure how to fix it.
Did you add the navmeshsurface to your ground? I added the navmeshsurface to the wrong thing, and when I applied it to my ground it stopped falling.
I did everything like the tutorial but when i try to play the ai go to space any solutions?
it doesnt work for me the enemy just flies into space like it has reversed gravity
same mine was glitched off the map and starts crazy flying
help
So I’ve been creating a game and this was really helpful. Though I am making a horror game. But still was helpful! Thanks!
Not sure what I am doing wrong, I downloaded your code and named layers to WhatIsEnemy, WhatIsGround etc. yet the layer masks are not working. I only have a ground to mask with right now so I gave it WhatIsGround and baked it. I have all the imports right in the Nav Mesh Agent yet the object is still falling through the ground. Originally the enemy was floating on the y axis, but now it is just falling through the ground.
were you able to figure out why this was happening
dude u r awesome
i was looking for this for a couple of days
thank u so much ♥
This is exactly the kind of tutorial i need. And is the exact solution i was looking for. Thank you so much!
I really like the cool BEAN
dani be like
so ur saying i could of just downloaded the script😐
this is really cool man , thank you very much
Glad you like it!
Hello Dave, great video! I followed this tutorial for a game where a monster chases a first person player. Everything works great except the patrolling. I can see it setting new walk points in the inspector, but the monster does not go to them. Any idea how to fix this? Thanks!
Same here!! Did you find any solution?
hey just wondering if you found the solution, i am having the same problem.
Its most likely because the walkpoint is being set at a point that is unreachable. You should set a timer for the walkpoint instead of the walkpoint changing when one was reached
You must set the walkPointRange value so that the variables randomX and randomZ work properly
thanks a lot Dave! I subbed :D
Now I've downloaded the zip file but how I get those godes in the unity editor?
drag and drop into the assets folder... at least thats what i did
@@not_herobrine3752 It didn't work whit me
@@ScratchTuto are you sure you have downloaded the right version of the zip file? like the latest version for unity 2020 and so on?
@@not_herobrine3752 idk I dosen't need it any more but thx for the help
@@not_herobrine3752 then what do I do?
Now I understand the difference between blueprints and c#.
Haha :D
followed this exactly and when i tried to play it he plummeted the earth at 350 mile per hour
Edit: found the problem and it was how close he was to the ground just get him closer to the ground and it should work
Please bro continue to post videos you are great and we miss you!,ps your website is amazing!
Great tutorial, but one big thing is missing.
Sometimes the random walkpoint is set in a wall or some obstacle and the "AI-Object" doesn't move and is stuck....
Same it doesnt move when i do it!
@@001Camera Hey Set the roads sidewalks or any ground area to the Layer Ground don't set the walls and other objects like building or mountains to Layer Ground
hi, when i use this script it works fine but my game becomes choppy / laggy. any help on how to fix this ?
help my ai IS FLYING AWAY
I literally just straight up assumed you ripped one of Brackey's videos I was so confident that was his voice! It's funny how two game development people on youtube sound so similar lol, thank you for the video!
Hello, thanks for the tutorial. Im very new to all this so im struggling a little. I made a sphere as the enemy, and i gave it all the scripts and stuff. I followed the tutorial until 5:27 basically. But my enemy is not moving, and it just shoots whenever it wants. it shoots at the player which is good, but i basically have a turret with infinite range in my game. How can i make the sphere actually move and act like an enemy? Also why does it just ignore the sight radius and stuff. (i dont have any errors in my console)
nav mesh? i suggest this discord: discord.gg/Ye6zzfQ
Hey, I suggest using the capsule if it is a ground enemy. If you want to make an enemy that can fly, this tutorial will not work.
Same, I didn't add a gun to mine, it's just not moving.
i couldn't make it move too
same, can't make it move
my enemy keeps shaking like it's drunk, and when i shoot it with a force, it goes back to the place it was before and continues to be drunk. what in the world is happening
my enemy randomly sinks through the map
edit: what i mean is that the Y value is going crazy - it will move a bit to the left, then shoot downwards in the space of around a millisecond as soon as the game starts, without travelling there. It just instantly warps below the map. I am using terrain that is very mountainous as the ground layer, though. maybe that is the problem? could you help me please?
edit 2: the same thing happens with the exact same ground that you are using.
did you set the " What is Ground“ var right ?
I'm having the same problem, the only thing that is different after changing stuff up(So that he dosen't fall down) is that my enemy won't move a bit ;/
I dont even have that which is annoying, it dosent show the "what is player" or "what is ground"@@lordzockt1853
Super helpful, man. Thanks!
Can someone help me out if n put the NavMeshSurface on an object it doesnt show me the same menu
Theres an empty slot called NavMeshData and an agent type ID
Edit and no bake option
Very usefull tutorial! I've already used it to program some turrets to fire at me and a ground enemy to chase and attack me!
Thanks, glad I could help!
hey dave i'm working on a 2d top down shooter and i'm using your script from the first projectile gun tutorial without reloading,the bulletsleft and the ray. when i do a burst gun instead of firing like RATATA, RATATA, it fires like RATATATA, RA, RATATATA, RA, maybe because it invokes resetshooting also with the burst projectiles. i'm also always shoting when i use the right analog because it moves with the left joystick and rotates with the right joystick. here is my code. can you help me??
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
//general
Rigidbody2D rb;
//movement
public float movespeed;
Vector2 movement;
public FixedJoystick movejoystick;
//rotation
public float rotatespeed;
public Joystick rotatejoystick;
//shooting
public GameObject bullet;
GameObject bulletshotted;
public Transform head;
public float bulletspeed;
public bool readytoshoot;
public float timebeetweenshooting;
public guncontainer gun;
public int bulletspertap;
public int bulletsshot;
public float timebtwnshots;
public bool allowinvoke;
void Update()
{
//movement
float horizontal = movejoystick.Horizontal;
float vertical = movejoystick.Vertical;
movement.x = horizontal;
movement.y = vertical;
//rotation
Vector3 movevector = (Vector3.up * rotatejoystick.Horizontal + Vector3.left * rotatejoystick.Vertical);
if (rotatejoystick.Horizontal != 0 | rotatejoystick.Vertical != 0)
{
transform.rotation = Quaternion.LookRotation(Vector3.forward, movevector);
}
//shooting
if (rotatejoystick.Horizontal != 0 && readytoshoot || rotatejoystick.Vertical != 0 && readytoshoot)
{
Shoot();
bulletsshot = 0;
}
timebeetweenshooting = gun.timebetweenshooting;
bulletspertap = gun.bulletspertap;
timebtwnshots = gun.timebtwnshots;
}
void FixedUpdate()
{
rb.MovePosition(rb.position + movement * movespeed * Time.deltaTime);
}
public void Shoot()
{
if (bulletsshot < bulletspertap)
Invoke(nameof(Shoot), timebtwnshots);
readytoshoot = false;
bulletshotted = Instantiate(bullet, head.position, head.rotation);
Rigidbody2D bulletrb = bulletshotted.GetComponent();
bulletrb.AddForce(head.up * bulletspeed * Time.deltaTime, ForceMode2D.Impulse);
Destroy(bulletshotted, 2);
bulletsshot++;
if (allowinvoke)
{
Invoke(nameof(Resetshooting), timebeetweenshooting);
allowinvoke = false;
}
}
void Awake()
{
rb = GetComponent();
readytoshoot = true;
bulletsshot = 0;
allowinvoke = true;
}
private void Resetshooting()
{
readytoshoot = true;
allowinvoke = true;
}
}
thanks dave!
I knew I saw this comment before!
Great video but for me they just fall right through the floor, i did everything correctly with baking but it just doesnt work any idea on what the issue could be?
How do I add those NavMesh Files?
pls help :(
Hey @Toasted! Try going to your bot’s inspector and adding a NavMeshAgent to it. For best results, change the speed to 2, the acceleration to 20, and the Obstacle Avoidance Radius to 2 as well. Hope this works for you!
Great tutorial!
Thanks!
Why is the ai shooting up
Remember that you can download the project file over my discord if you want :D
you can just search on yt on how to make a turret
and use the turret as ur enemy his hands
best speedrun Tutorial ever