Simple Enemy AI in Unity (State Machine, Find Target, Chase, Attack)

แชร์
ฝัง
  • เผยแพร่เมื่อ 22 ธ.ค. 2024

ความคิดเห็น • 392

  • @CodeMonkeyUnity
    @CodeMonkeyUnity  5 ปีที่แล้ว +26

    Here's the basic Enemy AI I've used in several of my games, very easy to make and easily expandable to fit any game!
    🎮 Play 7 Awesome Games (Action, Strategy, Management) and Help Support the Channel!
    ✅ Get the Game Bundle 67% off unitycodemonkey.com/gameBundle.php

    • @arturk419
      @arturk419 5 ปีที่แล้ว +2

      I just have bought a Hyper Knights for fun :)

    • @willkeith8699
      @willkeith8699 4 ปีที่แล้ว

      Does this work for 3D projects as well?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      @@willkeith8699 Sure, everything is working with Vector3

    • @aceofdiamonds1285
      @aceofdiamonds1285 4 ปีที่แล้ว

      Will this work with nav mesh agents attached?

    • @Dailymoresuccess
      @Dailymoresuccess 4 ปีที่แล้ว

      Can you show tutorial for pathfindingMovement ?

  • @Adidaas
    @Adidaas 4 ปีที่แล้ว +84

    Hahah, I can't believe it. I always thought that State Machines was gonna be something complicated to learn. But State Machine is literally just switch cases of different enums. That's super straight forward.
    Maybe it's just the name ."State Machine" sounded so intimidating.
    Thanks for the clear and concise tutorial! And especially thanks for not murmuring and for writing correct and clean code to follow!

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +14

      Hehe yup the name State Machine does sound intimidating, I had that exact thought when I first heard the term until I realized that's what I had been doing all along.

    • @anjobihis2052
      @anjobihis2052 4 ปีที่แล้ว

      This is so true lol!

    • @ludovicmahieu8278
      @ludovicmahieu8278 4 ปีที่แล้ว +3

      The version with abstract state is much more complicated (but powerful) :)

    • @ludicrouS_406
      @ludicrouS_406 3 ปีที่แล้ว +3

      State Machine are just facy words for a simple thing that makes people feel smart 😂

    • @asdfghjkl-jk6mu
      @asdfghjkl-jk6mu 10 หลายเดือนก่อน

      @@ludicrouS_406 what else would you name it to describe it accurately lmao?

  • @serialchiller9183
    @serialchiller9183 5 ปีที่แล้ว +14

    This intro song has become iconic. Please don't change it even though you change the visuals. X) Keep up the good work!

  • @peanutbutteraddict22
    @peanutbutteraddict22 3 ปีที่แล้ว +6

    PLEASE BEAWARE for people confused at different codes from 5:53, there has been some slight tweaking in values, so practice with the project files given above.
    I depressed myself for using 1f as reached position distance. if you are deleting the Enemy AI script and creating your own in the project files, see the Enemy AI script in the files first.
    And thank you Code Monkey for showing me a new way to use A star.

  • @abandonedgoals4067
    @abandonedgoals4067 5 ปีที่แล้ว +18

    Just wanted to say, love your channel! :)

  • @alperatmaca6430
    @alperatmaca6430 4 ปีที่แล้ว +1

    dude i've been searching non-stop for a tutorial ike this! thanks for the amazing tutorial!

  • @jvcmarc
    @jvcmarc 5 ปีที่แล้ว +58

    hey, can you make a video about how to make updates/patches for a released game?

    • @gouravsoniya2366
      @gouravsoniya2366 10 หลายเดือนก่อน +1

      ​@Shoo897 she was little straight forward 😂

  • @fardin3m39
    @fardin3m39 5 ปีที่แล้ว +3

    its so awesome he popup all previous tutorial that maybe you have question about at the start

  • @neozoid7009
    @neozoid7009 2 ปีที่แล้ว +1

    Awesome Tutorial and enemy system

  • @elroymusic6363
    @elroymusic6363 5 ปีที่แล้ว +12

    One day you will have created an AAA game in the Code Monkey Cinematic universe when combining all these tutorials.

  • @matt10y27
    @matt10y27 5 ปีที่แล้ว +8

    This is cool! Such a clean and concise way to implement the state changes with an enum and then a switch case.

  • @electromorphous
    @electromorphous 5 ปีที่แล้ว +5

    You're absolutely owning it with these videos. These are really very helpful.

  • @ScrubInstitute
    @ScrubInstitute 3 ปีที่แล้ว +1

    Why I like code monkey? Because he explain everything in a simple way. He deserves more subscribers. If you want to get more views, I recommend to change the thumbnail style.(just a suggestion)

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      I'm glad you found the videos helpful!

    • @ScrubInstitute
      @ScrubInstitute 3 ปีที่แล้ว

      @@CodeMonkeyUnity why don't you make a racing game?

  • @TheGozeraye
    @TheGozeraye ปีที่แล้ว

    I'd be so lost without these thank you!

  • @medmel2160
    @medmel2160 5 ปีที่แล้ว +2

    thanks for the quality content as usual. Gratz in advance for the 100k sub ! You deserve it and deserve much more

  • @Nicoulex
    @Nicoulex 4 ปีที่แล้ว +4

    Your channel has insane content ! keep on rockin'

  • @generichuman_
    @generichuman_ 2 ปีที่แล้ว

    Damn, I never thought of just having a static instance to use in another script. Avoids making spaghetti with dependencies, super clean!

  • @Andrew90046zero
    @Andrew90046zero 5 ปีที่แล้ว +3

    I haven't gotten deep into Ai in my game yet, and I was planning on making an entire fully blown State Machine class just to do wandering and movement. But this is exactly what I needed. And When I get around to it I will actually do what you did with the enums.

  • @USBEN.
    @USBEN. 3 ปีที่แล้ว +1

    Beautiful.

  • @TheStigChristensen
    @TheStigChristensen ปีที่แล้ว +1

    Would love to see a similar video for a friendly AI! A bot to help in singleplayer, when there's not a second player around

  • @anjobihis2052
    @anjobihis2052 4 ปีที่แล้ว +4

    Code Monkey, how did you learn to code like this? Is it because that you code so much and research by self-teaching yourself i.e. reading C# and unity API documents? Learning from others? How did you come up with this advanced yet simplified codes?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +3

      It's really all about experience, I've been writing code for 20 years so in all that time I've written some basic AI implementation dozens of times.
      It really is just trial and error, start trying to do something, think of exactly what I need to accomplish my goal, and try to make it while constantly trying different approaches, reading the manuals and googling for answers.
      So yeah, the more you do it the better you become.
      Best of luck in your own journey!

    • @anjobihis2052
      @anjobihis2052 4 ปีที่แล้ว +1

      @@CodeMonkeyUnity Thank you so much, Code Monkey! I appreciate this a lot! And your videos are sooo good!! Keep em coming! :D

  • @aggressivemastery
    @aggressivemastery 5 ปีที่แล้ว +3

    ECS? DOTS? Love you

  • @adansmith6174
    @adansmith6174 8 หลายเดือนก่อน

    The best tutorial!

  • @II-wu3wz
    @II-wu3wz 4 ปีที่แล้ว +3

    Where can I find "EnemyPathfindingMovement" you mentioned? You said you created it in another video, is it A*?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +2

      Yes it's A* th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @II-wu3wz
      @II-wu3wz 4 ปีที่แล้ว +5

      ​@@CodeMonkeyUnity There is no EnemyPathfindingMovement, nor a GridPathfinding, I watched every Tutorial for this, it's a bit frustrating. :D
      I imported now parts of your project and adapted it to my project, but I can't access namespace GridPathfinding,
      in EnemyPathfinding it throws me a nullreferenceexception at line 97
      "pathVectorList = GridPathfinding.instance.GetPathRouteWithShortcuts(GetPosition(), targetPosition).pathVectorList;"
      But I have the GridPathfinding in my Project, can you help me?
      I also did a Debug, the reference is just null, the folder for namespace GridPathfinding is in the same folder for me other AI stuff.
      And in which tutorial you created all this stuff? Definitly not in A* :D
      I have to add:
      Reading all the other answers you give here seems like you don't really know the content of your own videos,
      there is no EnemyPathfinding, no GridPathfinding.

    • @vishwahsiva8738
      @vishwahsiva8738 4 ปีที่แล้ว

      @@II-wu3wz seams like the codes are in EnemyAI.unity pakage check it out

    • @ceciruiz4262
      @ceciruiz4262 3 ปีที่แล้ว

      @@II-wu3wz I have the same error and I haven't found a solution :(

    • @TheKodiakDJ
      @TheKodiakDJ 3 ปีที่แล้ว

      I don't know if I'm in time to help anyone out in this thread, but for people looking for those scripts in the future, they are in the subfolder TopDownShooter\Scripts in the EnemyAI unity package.

  • @filipgawlik3259
    @filipgawlik3259 5 ปีที่แล้ว

    And this time I was not disappointed.

  • @Exisss
    @Exisss 5 ปีที่แล้ว +1

    Really Helpful, as always :)

  • @rahulkumarjha2404
    @rahulkumarjha2404 5 ปีที่แล้ว +1

    Thanks for this awesome tutorials .

  • @lennyseed9255
    @lennyseed9255 3 ปีที่แล้ว

    Thank you for this awesome video

  • @ezekielakande5501
    @ezekielakande5501 4 ปีที่แล้ว

    Finally found someone useful

  • @glebgrozin6872
    @glebgrozin6872 5 ปีที่แล้ว +1

    You're the man. Bless

  • @hamzamusani5500
    @hamzamusani5500 4 ปีที่แล้ว +1

    How does one set an instance 6:15

  • @rafaelcorrea7959
    @rafaelcorrea7959 5 ปีที่แล้ว +2

    You should publish Code Monkey utilities as a free asset in the unity asset store.

  • @SolidMotionVFX
    @SolidMotionVFX 3 ปีที่แล้ว

    Great video. How do i setup so enemies if close to each other they should avoid on and other.

  • @SwampySongs
    @SwampySongs 4 ปีที่แล้ว

    Do you recommend navmeshes for things like this?
    The problem I run into is adding complexity/randomness to a navmesh.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Your Movement method is separate from the AI logic, you can use a NavMesh or just an A* Grid or in the video it uses no pathfinding. All of them work just fine.

  • @insaneduane
    @insaneduane 4 ปีที่แล้ว +3

    Thank you for this easy to follow and well explained tutorial on making a State Machine/FSM. Many other videos on this subject tend to get convoluted and "lost in the weeds" so to speak. I've used the Mecanim system as a FSM but I've found that to be a bit buggy (OnStateEnter and OnStateExit seems to not always work (probably my fault)) so I used your method and my VR zombies are acting and sounding like I want them to. I liked this video and I am subscribed. Thanks again!

  • @david-spliso1928
    @david-spliso1928 5 ปีที่แล้ว +1

    Thank you CoMo.

  • @MarkFilliph
    @MarkFilliph 2 ปีที่แล้ว

    very useful video! thanks for sharing! Which video is the EnemyPathfindingMovement script? I can't find on your channel.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว

      I covered A* Pathfinding here th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @BlastGamer77
      @BlastGamer77 2 ปีที่แล้ว

      @@CodeMonkeyUnity Problem: Absolutely nothing on the enemy pathfinding script is in that video.

  • @thederbly6009
    @thederbly6009 ปีที่แล้ว

    Is the path finding script required for this to work?

  • @levanapakidze1606
    @levanapakidze1606 4 ปีที่แล้ว +1

    isn't returning a static instance of a player game dependant code ? what if I attach that script to multiple instances ?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Yes, if you have a design that involves the enemy targeting more than just the player you need to modify that.

  • @terrytech8812
    @terrytech8812 4 ปีที่แล้ว

    How would we go about making the enemy avoid walls ?..... and without the NavMesh System. Well is suppose they cant see you because there's a wall so make them forget about you and target something else randomly. So then it comes down to using a raycast and detecting if the enemy has line of sight to its target.

  • @xplo8950
    @xplo8950 3 ปีที่แล้ว

    Is there a playlist encompassing all of the tutorials in order

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      Most of the tutorials are standalone, so just browse my video list and look for the topics that interest you

  • @Stinger-rq4gy
    @Stinger-rq4gy 3 ปีที่แล้ว

    I saw this its great, thank you sooooooooooooooooooooooooooooooooooooooo much.

  • @carrihook1094
    @carrihook1094 ปีที่แล้ว

    When I download the project I get the error LWRP does not exist in the namespace UnityEngine.Experimental.Rendering and The type of namescape name 'Light2D' could not be found

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว

      LWRP has been renamed into the Universal render pipeline, I covered that in the FAQ on the download page, you just need to change the using statement

  • @TalkingRaven_
    @TalkingRaven_ 2 ปีที่แล้ว

    Would creating state_class that inherit an interface Istate with a dosomething() function and then using them as a sort of currentstate.dosomething() for the update function be advisable? or is Switch case still better? I'm currently looking into it for scalability in terms of AI behavior so it can still look clean even with a lot of different states.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว +2

      Yup that's a very valid approach and if you do have tons of states then yup I would recommend that over switch states.

    • @TalkingRaven_
      @TalkingRaven_ 2 ปีที่แล้ว

      @@CodeMonkeyUnity Thank you for the quick reply!

  • @artemiymak8332
    @artemiymak8332 3 ปีที่แล้ว

    Hello, where I can look "previos video" with pathfinding system?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      It's here th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @frazoni.
      @frazoni. 3 ปีที่แล้ว

      @@CodeMonkeyUnity I was just about to ask the same, thanks for still answering questions even though the video is a bit "old". Cheers :)

  • @chrisfarlee6496
    @chrisfarlee6496 3 ปีที่แล้ว

    So one thing i was wondering, is it better to use A* for path finding or a 2d NaveMesh?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว +2

      A* is the algorithm, NavMesh uses A* to calculate the path. Do you mean Grid vs NavMesh? That depends on the structure of your levels

    • @chrisfarlee6496
      @chrisfarlee6496 3 ปีที่แล้ว

      @@CodeMonkeyUnity Good to know thank you! and i guess i did mean Grid vs mesh, sorry! i've only been working with unity for around 8 months and am still learning by day! I found a 2DNavMesh on Github that allows you to use unity's built in NavMeshAgent component directly and i've been using that for top down enemies, and i was just wondering if that's the most optimal way to implement it i guess!

  • @juicedup14
    @juicedup14 5 ปีที่แล้ว +1

    Thanks patrons

  • @schindoneer198
    @schindoneer198 3 ปีที่แล้ว

    Is there any way to do this wit the Ai from brackeys' tutorial?

  • @dementovoid2255
    @dementovoid2255 2 ปีที่แล้ว

    How can I get EnemyPathfindingMovement to be recognized by Unity? Do I have to follow the A* Pathfinding tutorial before I follow this tutorial?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว

      Yes, or use any other pathfinding system you want

  • @Irategamefan
    @Irategamefan 3 ปีที่แล้ว

    I'm just wondering but could this work in a 3D space? By Space I mean Space like a flying sim?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว +1

      Sure, the logic is based on Vectors, it doesn't care if those vectors have a y of 0 or not

  • @tostpl8258
    @tostpl8258 5 ปีที่แล้ว

    I think it's really good thing to show us your function (like getrandomdirection) . Sorry for my English if I did smth wrong

  • @jessenance8889
    @jessenance8889 4 ปีที่แล้ว

    Wonder if it could be modified to my turn based game. Each move is limited to a certain range.

  • @pythora4173
    @pythora4173 4 ปีที่แล้ว +1

    I downloaded the project files and put them in Unity, but it didnt work because there were so many errors. Fix?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      What didn't work?

    • @pythora4173
      @pythora4173 4 ปีที่แล้ว

      @@CodeMonkeyUnity I'm not really sure, but the enemy ai script had a lot of error messages

  • @estusmedia1887
    @estusmedia1887 4 ปีที่แล้ว +1

    I've followed this up until the point where you run the first test, I have all of your project files but when I try to run the test with what i have so far I get an issue with Object reference not set to an instance of an object EnemyPathfindingMovement.SetTargetPosition and because of it my Enemy won't move at all, how do I fix? The error only appears on play.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      You have something set to null, add a Debug.Log to figure out what it is

    • @estusmedia1887
      @estusmedia1887 4 ปีที่แล้ว

      @@CodeMonkeyUnity I eventually figured out it's tied to the fact I don't have the Aim System because I'm looking to make a Melee character, but it seems in order to use the Pathfinding, you need to use the aim system, which then involves me basically needing to use the entire project for the topdown shooter due to how everything is linked together?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      ​@@estusmedia1887 The Pathfinding does not require any aim system at all, it just has a Grid and calculates a path, it has no concept of Units or Aim or anything, it's a completely independent system. Check out the Grid System videos and the Pathfinding one th-cam.com/play/PLzDRvYVwl53uhO8yhqxcyjDImRjO9W722.html

    • @estusmedia1887
      @estusmedia1887 4 ปีที่แล้ว

      I've done both of those just having difficulties with this one now, I'll come back to it when I have a better understanding and experience and hopefully I'll be able to understand, appreciate all the great videos!

  • @lucamassari6708
    @lucamassari6708 2 ปีที่แล้ว

    Can you use the same script applied to different enemies that don't trigger the chasing together?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว

      What do you mean "trigger the chasing together"? Each script instance is separate, if you have 3 enemies and one starts chasing the player it won't affect the others, if the others are far from the player they will stay in their patrol state.

  • @bellatorpoeta
    @bellatorpoeta 3 ปีที่แล้ว

    How would I apply this state machine to a turn-based system with several enemy units? I would need to keep track of which unit is being controlled as well as have an indicator to not go to a new unit until done, but doesn't break reset the variables?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว +1

      Each Unit would have their own state machine and then a general Turn System would handle who is active, I covered something like that here th-cam.com/video/0QU0yV0CYT4/w-d-xo.html

  • @akashverma4280
    @akashverma4280 4 ปีที่แล้ว +1

    Hello, thanks for tutorial! I wanted to ask an unrelated question. Do you think making mobile games as an indie dev would pay off? I'm in last year of graduation of my CS degree. I'm thinking of trying to pursue gamedev full-time.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Definitely give it a try, especially while you're still in school, but don't risk going at it full-time, do it as a side project along with a stable job.
      It's an extremely competitive industry and very difficult to make a living th-cam.com/video/Vlcop0uxFIQ/w-d-xo.html

    • @akashverma4280
      @akashverma4280 4 ปีที่แล้ว

      @@CodeMonkeyUnity Thanks for taking time to reply. I have already watched that video cuz I'm already subbed. It had some nice tips. But working with a full time job would definately wear me out. I have plenty of time now, I'm at home due to current pandemic situation, I got no loans to pay and I have no urgent need for money.
      What I'm saying is that, I try gamedev till my graduation and see how it goes. And if it didn't go well I'll say goodbye to it and get a corporate job, but if it did go well (ik chances are very thin) then I consider it doing full-time. Also, where I live, cost of living is less.
      I could really use some guidance right now. Because I don't know any game dev in person. Thanks for reading.

  • @Sartoris36
    @Sartoris36 4 ปีที่แล้ว

    Thank you for this video! Do you have any suggestions on how to make the enemy avoid obstacles without using pathfinding? Perhaps by turning when encountering an obstacle, or something similar? That would be very helpful.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      If you just want avoidance like keep away then just keep a reference to it and test the distance.
      But if you want avoidance in order to reach a target then thats the definition of Pathfinding so I'm not sure what you're exactly trying to do.

    • @Sartoris36
      @Sartoris36 4 ปีที่แล้ว

      @@CodeMonkeyUnity Thank you for your reply. I should have been clearer: what I am referring to is a system for the enemy to chase the player or look for him without using A* pathfinding, but by linecasting around him and basically "feeling out" the environment. So for example, when he "feels" or "sees" an obstacle, he turns to go around it. Here is an example of that: twitter.com/i/status/1089989454704582656
      I would love to see you implement something like this :)

  • @loot6
    @loot6 4 ปีที่แล้ว

    What if he's in a small room that he can't exit from, the random range will keep selecting locations out of his range...ie outside the room...?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      You can easily apply some pathfinding logic on top of this system in order to identify walkable and non-walkable areas.

    • @loot6
      @loot6 4 ปีที่แล้ว

      @@CodeMonkeyUnity You didn't understand what I said, it's not about pathfinding. If he's in a room say 10 x 10 and he's plotting random distances to walk to between 20 and 50 he's just gonna constantly be finding locations outside of the room...

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      @@loot6 That IS Pathfinding. You get a random position, then check with your Pathfinding code to see if the position is reachable or too far. If it's not a valid position you generate another one.

    • @loot6
      @loot6 4 ปีที่แล้ว

      @@CodeMonkeyUnity With pathfinding you first generate a grid, it's important that your pathfinding algorithm only finds paths INSIDE that grid, otherwise you'd be wasting processing power checking loads of locations out of range. It seems the same would apply if trapped in a limited size room. In the example I gave you above, 80% of the paths found each time would be outside the room.

  • @fv4202x
    @fv4202x ปีที่แล้ว

    How do I make pathfinding for non grid based top down 2d games?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว

      Use NavMesh, although not sure if Unity's built in NavMesh supports 2D nowadays, I think there's an extension unitycodemonkey.com/video.php?v=atCOd4o7tG4
      Or use something like the A* Pathfinding Project unitycodemonkey.com/video.php?v=46qZgd-T-hk

  • @thomasbottino8858
    @thomasbottino8858 4 ปีที่แล้ว

    Hello great tutorials u do big thanks they help Great. I bought some behavior designer and other but it was buggy and not as versatile as learning the basic that u offer us. One question about the patrolling state tho your map is very empty but how to deal with map with wall and obstacle where destination would be in the obstacle or even outside the map.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Add some pathfinding th-cam.com/video/alU04hvz6L4/w-d-xo.html

  • @RatonBeton
    @RatonBeton ปีที่แล้ว

    Can you compare a vector whit a regular number?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว +1

      No, a Vector3 is composed of XYZ which are 3 numbers. You can't compare 3 numbers to one.
      What are you trying to do?

    • @RatonBeton
      @RatonBeton ปีที่แล้ว

      @@CodeMonkeyUnity i'm trying to check if the position betwen a enemy and a checkpoint is less then 0.5

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว

      Then you want to use Vector3.Distance(); to get the distance between two points
      Or vector3.magnitude to get the size of a vector

    • @RatonBeton
      @RatonBeton ปีที่แล้ว

      @@CodeMonkeyUnity ty

  • @edwinmacias7038
    @edwinmacias7038 3 ปีที่แล้ว

    hello, excuse me, in which tutorial did you make the code for "enemyMain"? excellent video by the way, thanks :)

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      That's not directly relevant to the AI logic, you can use any movement code and any animation system you want.
      For example I covered 2 character controllers here
      th-cam.com/video/Bf_5qIt9Gr8/w-d-xo.html
      th-cam.com/video/mJRc9kLxFSk/w-d-xo.html

    • @edwinmacias7038
      @edwinmacias7038 3 ปีที่แล้ว

      @@CodeMonkeyUnity I'm sorry, I got confused, I was referring to "gridPathfinding", I saw the list of pathfinding tutorials, but it seems to me that I skipped some, because the class was called only pathfinding

  • @emmesplaylists
    @emmesplaylists ปีที่แล้ว

    Hi, I added the package to my project, but now I have a problem I don't know how to solve (I'm new to Unity): The type or namespace name 'LWRP' does not exist in the namespace 'UnityEngine.Experimental.Rendering' (are you missing an assembly reference?) [Assembly-CSharp]. Does anyone have a tip about what should I do?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว

      The Lightweight Render Pipeline has been since renamed into the Universal render pipeline, now it's under UnityEngine.Rendering.Universal;

  • @Rabellois
    @Rabellois 5 ปีที่แล้ว

    Could you do a tutorial about State Machines without enum? Using different classes for each state

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  5 ปีที่แล้ว +1

      I'm not a big fan of inheritance so I normally use simple enum state machines.
      However in Battle Royale Tycoon each Building has its own logic in a separate class and then within that class I have the normal enum state machine. So I might look into making a video on how that works.

  • @sonicherores
    @sonicherores 5 ปีที่แล้ว +1

    Can this logic be Used for 3d games :D? thanks for the great tutorials as always your essentials have helped me make stuff so much faster.

    • @caxopog
      @caxopog 5 ปีที่แล้ว

      Of course it can. U even can copy this code in 3D game and it may work even without additional code

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  5 ปีที่แล้ว

      Sure, the logic for handling the various states has no 2D or 3D dependency.

    • @sonicherores
      @sonicherores 5 ปีที่แล้ว

      @@CodeMonkeyUnity Thank you again I thought as much but had no time to test it due to life up to what point in dev are we allowed to use your essentials incase of release. Nowhere near but goos to ask early thanks again for the wonderfull tutorials!

  • @Hypocat
    @Hypocat 5 ปีที่แล้ว

    Hey, I hope this is not stupid question but where is the video where you do the EnemyPathFindingMovement? I can't find it.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  5 ปีที่แล้ว +3

      Here th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @Hypocat
      @Hypocat 5 ปีที่แล้ว

      @@CodeMonkeyUnity thank you very much.

  • @produccionesr7168
    @produccionesr7168 4 ปีที่แล้ว

    I would like to make a metal gear game, do you think this can be of use to me for that?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Sure, all AI is just expanding upon this same concept.

  • @GhsT-th2gg
    @GhsT-th2gg 3 ปีที่แล้ว

    is there a tutorial to make the attack system that you are using ?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว +1

      I covered it here th-cam.com/video/fuGQFdhSPg4/w-d-xo.html

  • @Krebzonide
    @Krebzonide 4 ปีที่แล้ว

    I would like to make 2 ai attack each other. Is there a way to detect only the closest enemy so I don't have to run a large for loop for each unit?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      If your enemies have Colliders you can use Pysics2D.OverlapCircle(); to locate all colliders near a certain position

  • @DoguethekillerYT
    @DoguethekillerYT 4 ปีที่แล้ว

    Does it work for 3d games or in 3d projects?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Sure, there's nothing here limited to any perspective th-cam.com/video/3zxTigjJr24/w-d-xo.html

  • @pythora4173
    @pythora4173 4 ปีที่แล้ว +1

    Does this work with 3D games as well?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Sure, there's nothing in this system that's specific to 2D

    • @pythora4173
      @pythora4173 4 ปีที่แล้ว

      @@CodeMonkeyUnity I downloaded the project files and put them in Unity, but it didnt work because there were so many errors. Fix?

  • @Roadis
    @Roadis 5 ปีที่แล้ว

    What is the best way to do this with ECS? I was thinking about adding components or deleting them when they should do other tasks. But how is the Performance for that?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  5 ปีที่แล้ว

      Yeah I guess either adding/removing components or just a component with a State enum. Multiple components might be better since you can store state specific data.
      Adding/Removing components is extremely fast so unless you're changing state hundreds of times every frame it shouldn't be an issue.

  • @davestomper3428
    @davestomper3428 ปีที่แล้ว

    what do we do if we don't have your previous scripts already ?? I downloaded the your utilies are they in their ????????

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  ปีที่แล้ว

      What scripts? the point of this video is to learn how a State machine works, every game is going to have different AI specific logic, there's no point in copying the specific logic I used in the demo

  • @billjohnson9880
    @billjohnson9880 4 ปีที่แล้ว

    If I make commercial game someday, can I use code samples or utility codes in Code Monkey?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Yup! Feel free to use anything you learn from these videos

  • @josueccama303
    @josueccama303 5 ปีที่แล้ว +1

    hi, nice video. Please make video about isometric tile map with ECS. thanks

  • @shuvi1565
    @shuvi1565 2 ปีที่แล้ว

    What video is the pathfinding one?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว

      Here it is th-cam.com/video/alU04hvz6L4/w-d-xo.html

  • @MrFarkasOfficial
    @MrFarkasOfficial 4 ปีที่แล้ว +1

    alright, alright, you`ve got my subscription.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Glad you like what you see!

    • @MrFarkasOfficial
      @MrFarkasOfficial 4 ปีที่แล้ว

      ​@@CodeMonkeyUnity i`m still a noob though. having trouble with the EnemyPathfindingMovement part of the void awake function. console says the namespace can`t be found. my guess is i need another c sharp script, the EnemyPathfindingMovement script but i don`t know where to find it.

    • @MrFarkasOfficial
      @MrFarkasOfficial 4 ปีที่แล้ว

      @@CodeMonkeyUnity nevermind, solved! :D

  • @cptray-steam
    @cptray-steam 4 ปีที่แล้ว

    Im trying to make ally soldiers for a 3d game Im making hopefully this works.although Im not sure how to change the animation through code and I have literally been looking for help *all day*

    • @cptray-steam
      @cptray-steam 4 ปีที่แล้ว

      @Epoch plus5yeah Im working on it, but its a pain in the arse.

    • @cptray-steam
      @cptray-steam 4 ปีที่แล้ว +1

      @Epoch plus5 basically you (the character) are a robot nicknamed K.Y.L.E. who is activated by the agency to counter attack a rogue ai that is actually been hacked by an unknown extraterrestrial force. You have one goal regain control over the facility and save humanity from one of the greatest catastrophes.
      And the animations are still giving me problems.

    • @cptray-steam
      @cptray-steam 4 ปีที่แล้ว

      @Epoch plus5 thats what Im working on, a demo. Just one level to show people and get opinions and critiques.

    • @cptray-steam
      @cptray-steam 4 ปีที่แล้ว

      @Epoch plus5 interesting I like it keep up the good work on that game!

    • @cptray-steam
      @cptray-steam 4 ปีที่แล้ว

      @Epoch plus5 okay I will record a short video then upload

  • @Rejnols
    @Rejnols 4 ปีที่แล้ว

    When i open the project in Unity i get a bunch of compile errors. Any idea why?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      What compile errors? You're probably missing some packages

    • @Rejnols
      @Rejnols 4 ปีที่แล้ว

      @@CodeMonkeyUnity A bunch of different ones. Just closed down the project and started working on something else. I downloaded the package files from your website, is there others i need to get somewhere?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      @@Rejnols The project files contain all the code and assets but you still need to set up your project. If you see errors related to lights then you probably need to open the Package Manager and install the Universal RP

  • @IrvinMenezes
    @IrvinMenezes 4 ปีที่แล้ว

    I'm still lost, how does the float work as a measure of distance?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Do you mean the float reachedPositionDistance? It's just a value based on the unit scale of your objects.
      In my case, my characters are about 6 units tall so I set the value accordingly. If your characters are only something like 1 unit tall then change the value.

  • @nwoudochiobinna3673
    @nwoudochiobinna3673 3 ปีที่แล้ว

    Hello code monkey....do your tutorial work on 3d as well as 2d?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      Yes, the AI doesn't care how the camera is set up

    • @nwoudochiobinna3673
      @nwoudochiobinna3673 3 ปีที่แล้ว

      @@CodeMonkeyUnity Thank you for replying...that's one of the things everyone loves about you...you still reply 😃

  • @troelsholm9761
    @troelsholm9761 4 ปีที่แล้ว

    So if i don't use your utils, how do i do the code then?
    public class Patrol : MonoBehaviour
    {
    public static Vector3 GetRandomDir()
    {
    return new Vector3(UnityEngine.Random.Range(-1f, 1f), UnityEngine.Random.Range(-1f, 1f)).normalized;
    }
    private Vector3 startingPosition;

    private void Start()
    {
    startingPosition = transform.position;
    }
    private Vector3 GetRoamingPosition()
    {
    startingPosition + GetRandomDir() * Random.Range(10f, 70f);
    }
    }

  • @TheTrolderia
    @TheTrolderia 4 ปีที่แล้ว

    In a 2d top down game, how do i make my AI walk random between 1-5 sec and then stop for 1-3 sec, and then walk again? :)

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Add a simple timer, when you reach the position change the state to start counting the timer, when timer is done go back into the patrol state and back into the next position.

    • @TheTrolderia
      @TheTrolderia 4 ปีที่แล้ว

      ​@@CodeMonkeyUnity Thanks for quick respons - But what kind of code do i need? It's a random position, so he dosen't reach it?
      Is it like when he walked beetween 1-5 -X or -Y pos, change pos?

  • @dextermunashemuwodzeri942
    @dextermunashemuwodzeri942 5 ปีที่แล้ว +1

    Can you please continue making more AI tuts

  • @BlastGamer77
    @BlastGamer77 2 ปีที่แล้ว

    The roaming code given in the first part of this video doesn't work. The EnemyPathfindingMovement script will always result in a NullReferenceException on the "pathVectorList = GridPathfinding.instance.GetPathRouteWithShortcuts(GetPosition(), targetPosition).pathVectorList;" line, even if the code is copied one to one from what you have in this video and even if the pathVectorList is made beforehand (As to not make it null). The error only happens in play mode but it prevents the whole roaming script from working properly.

    • @concov3000
      @concov3000 2 ปีที่แล้ว

      I'm getting the same issue when it come to the EnemyPathfindingMovement. Visual Studios tells me that the namespace couldn't be found :( Any fix to this issue?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  2 ปีที่แล้ว

      Use Debug.Log to find what is null unitycodemonkey.com/video.php?v=5irv30-bTJw
      Maybe you don't have the GridPathfinding set up, maybe your unit is off-grid, maybe theres no path to that point

    • @BlastGamer77
      @BlastGamer77 2 ปีที่แล้ว

      @@CodeMonkeyUnity I did. I tested all three parts and the one that returned a NullReferenceException is the GridPathfinding.instance.GetPathRouteWithShortcuts(GetPosition(), targetPosition) part. But I have GridPathfinding setup. In fact I got it directly from the files given for this lesson on your website.

    • @BlastGamer77
      @BlastGamer77 2 ปีที่แล้ว

      @@CodeMonkeyUnity Are you going to answer my comment? Either your code doesn't work, or you failed to include critical information in your own tutorial.

    • @BlastGamer77
      @BlastGamer77 2 ปีที่แล้ว

      @@CodeMonkeyUnity Ok I have tried literally everything; your code does not work. I fixed my initial issue but now the object refuses to move even when using your exact code. The export on your website does not work; there's no scene and no way to test it. This entire tutorial is useless.

  • @thederpderp7758
    @thederpderp7758 3 ปีที่แล้ว

    Thanks!

  • @belddap8909
    @belddap8909 3 ปีที่แล้ว

    Can I use machine learning for AIs?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว +2

      Sure! th-cam.com/video/zPFU30tbyKs/w-d-xo.html

  • @sife-i9n
    @sife-i9n 3 ปีที่แล้ว

    does this work for multiple agents ???

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  3 ปีที่แล้ว

      Sure, each agent can have its own AI

    • @sife-i9n
      @sife-i9n 3 ปีที่แล้ว

      @@CodeMonkeyUnity i dont know why but if i create a new object and add a nav mesh agent component both of them stop if i removed it the other one works fine??????? any suggestions ?

  • @evggg
    @evggg 4 ปีที่แล้ว

    Hey! You are not using ShootingTarget state. All shooting locates in ChaseTarget state.

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Yes, that state is meant to be a dummy state while the animation plays.

  • @anonymous-oq4fv
    @anonymous-oq4fv 4 ปีที่แล้ว

    hey code monkey i love ur videos but i had an issue and it is that when i put "private EnemyPathfindingMovement pathfindingMovement;" in the console puts me "The type or namespace name 'EnemyPathfindingMovement' could not be found" do you think you can help me with that i appreciate it

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      You dont have any class in your project named EnemyPathfindingMovement

  • @ejazsafi4759
    @ejazsafi4759 4 ปีที่แล้ว

    HEY! i made a minion with switch statement and nav mesh agent.
    and first case is destroy turret
    and after destory base. BUT when turret is destoryed it says "The object of type 'GameObject' has been destroyed but you are still trying to access it.". help me fix it
    how can i say ? if turret is destroyed switch case..?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      What are you trying to do? Destroying the game object should be the last thing you do, first handle everything you need to do related to destroying the tower and only after everything is done do you destroy the game object

    • @ejazsafi4759
      @ejazsafi4759 4 ปีที่แล้ว

      @@CodeMonkeyUnity i fixed it tnx! it was just basic syntax error... :)! but thank you!

  • @douwemeijer6556
    @douwemeijer6556 4 ปีที่แล้ว

    Hi I was just wondering if u could use the same code In a 3D game. Of course with the changes of the vector positions

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      Sure, there's nothing here that is unique to 2D, everything already works with Vector3s th-cam.com/video/3zxTigjJr24/w-d-xo.html

  • @terry-
    @terry- 11 หลายเดือนก่อน

    Great!

  • @caprariualex2100
    @caprariualex2100 5 ปีที่แล้ว +1

    Your EnemypathfindingMovement script please?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  5 ปีที่แล้ว

      Here th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @nautics9927
      @nautics9927 4 ปีที่แล้ว +1

      @@CodeMonkeyUnity i downloaded it but i can only find scripts called pathfinding, no enemypathfinding

  • @jonathanmcginley6835
    @jonathanmcginley6835 4 ปีที่แล้ว

    Where can I find the Enemy pathfinding movement script?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      I covered pathfinding here th-cam.com/video/alU04hvz6L4/w-d-xo.html

    • @BlastGamer77
      @BlastGamer77 2 ปีที่แล้ว

      @@CodeMonkeyUnity No you didn't. That video has nothing called EnemyPathfinding in it. Don't say something is in a video that isn't actually there.

  • @Chrischek89
    @Chrischek89 5 ปีที่แล้ว

    Invalid Video ID on Project files link. Did you switch the location?

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว +1

      Seems I put the wrong link, here it is: unitycodemonkey.com/video.php?v=db0KWYaWfeM
      Thanks!

  • @zarceh
    @zarceh 4 ปีที่แล้ว +1

    how do i make bots attack each other?
    like in an chaotic battle royalle

    • @CodeMonkeyUnity
      @CodeMonkeyUnity  4 ปีที่แล้ว

      What do you mean by attack each other? Attack the closest? If so just go through a list of all units and find the closest.
      You need to define more detail on exactly what type of behaviour you're trying to create.

    • @zarceh
      @zarceh 4 ปีที่แล้ว

      Code Monkey i was thinking of doing an simple AI that would attack at a certain range, and would follow the clossest AI... like hunting it down, if they get really close (almost touching the other AI) the bot would start attacking.

  • @adeled8833
    @adeled8833 2 ปีที่แล้ว

    Thank you! I have made it looking less frizzy on frames (if there are many obsticles and the path is updated often) by making a square each time im setting a new roaming path around the roaming enemy x+ -5 y+ -5 (which is 11*11 possible values) ,and then checking if there are other enemies or obsticles, then substracting these grids out the 11*11 list, then choosing random one from the clean list

  • @ASMRcu
    @ASMRcu 5 ปีที่แล้ว

    Sir plz make a video on AI cover system...3D