Advance Enemy AI in Godot

Поділитися
Вставка
  • Опубліковано 27 гру 2024

КОМЕНТАРІ • 184

  • @GCSGamingDev
    @GCSGamingDev 10 місяців тому +6

    This just popped up in my suggested videos. Very nice explanation. I haven’t gotten to my enemy AI, but I will keep this approach in mind. Thanks!

  • @ThePouetman
    @ThePouetman Рік тому +24

    This is exactly what I needed, i was struggling on how to solve obstacle avoidance without implementing a grid based pathfinding, this seems like the perfect solution

    • @JackieCodes
      @JackieCodes  Рік тому +3

      Thank you! And please feel free to reach out if you need some help!

  • @StevePixelFace
    @StevePixelFace 2 роки тому +53

    I learned stuff, I laughed a lot and picked up new dance moves. Excellent video.

  • @woof6907
    @woof6907 2 роки тому +106

    Jidion introduced me to the best UA-camr. You should also invest in a high quality mic

    • @Miesko1
      @Miesko1 2 роки тому +2

      i dont think she got the funds for that

    • @Jriniscool
      @Jriniscool 2 роки тому +2

      @@Miesko1 what makes u think that?

    • @JacksonAcademy1
      @JacksonAcademy1 2 роки тому

      Which video did Jidion mention her?!

    • @JacksonAcademy1
      @JacksonAcademy1 2 роки тому

      I foudnd the video, Twitch Con, but what is the timestamp?

    • @Miesko1
      @Miesko1 2 роки тому

      @@Jriniscool not a popular youtuber innit

  • @BeeStats
    @BeeStats Рік тому

    Thanks! Valeu!

  • @JC-jz6rx
    @JC-jz6rx Рік тому +8

    I don’t know who you are. I don’t know where you came from. But I received a great explanation of something I was too lazy to research myself. It’s scary how much we don’t know in these sort of development oriented fields (edit:we don’t know what we don’t know) I hadn’t seen this type of AI system before. Thanks for the video

    • @JackieCodes
      @JackieCodes  Рік тому

      I don't know who you are. I don't know where you came from xD But your comment really made me smile! I appreciate it so much. Took me a long time to wrap my head around this stuff, I'm glad you got something out of this.

  • @serenacula3256
    @serenacula3256 Рік тому +6

    A fun little addition to this, which I used to use to create super simple but effective AIs, is great for creating 'group predators'. The goal is for each predator to try and keep away from each other, while chasing the player. The result of this is that they will naturally surround the player, circling around them.
    I got the idea from a study I saw on how wolves algorithmically surround their prey - 1. go towards prey, 2. stay away from other wolves, 3. repeat
    Adding something like this to your 'interest' algorithm would make for fun group dynamics!

  • @levizin917
    @levizin917 4 місяці тому +1

    I saw that video you referenced, and thought cool, but I couldnt think of how to implement it, this gives me what I need, thank you

  • @ZerOrie
    @ZerOrie 9 місяців тому

    This is exactly what I needed, having myself been inspired by that same video trying to implement it one way, I was looking for a less messy way to implement it and you just made my week (like a year+ later)!

  • @lukaspetrikas6320
    @lukaspetrikas6320 6 місяців тому +3

    This is very useful. After implementing this I have realized that this method has 1 issue. When player stand directly in parallel with the Enemy in between an obstacle. The enemy will not try to circle around the obstacle to reach the target.

    • @theseangle
      @theseangle 6 місяців тому

      Are you sure you implemented the Dangers correctly?

    • @lukaspetrikas6320
      @lukaspetrikas6320 6 місяців тому

      @theseangle I think so. The context steering cannot completely replace the pathfinding. Its quite easy to get enrmy to stuck in many different positions such as: In between 2 obstacles, or as I previously mentioned when the player stands directly in parallel with enemy with an obstacle in between.
      These sort of scenarios require some additional logic to be implemented to complement danger values that are assigned by hitting other obstacle colliders. For example, always favoring right side if there are obstacles on both sides... there are other ways as well but simply setting danger values of a vector and 2 neighbouring vectors ( as has been explained in this video) will not ensure the enemy can find a way towards player if you have many obstacles

    • @theseangle
      @theseangle 6 місяців тому

      @@lukaspetrikas6320 hmm maybe you can create an algorithm which detects when something like this happens, and depending on the cause do some actions, e.g. enlarge the ray casts for x seconds. Maybe it'll help

    • @theseangle
      @theseangle 6 місяців тому

      @@lukaspetrikas6320 also the steering is pretty important. Without it the ai gets stuck on corners

    • @peacefultengu6384
      @peacefultengu6384 5 місяців тому

      I didn't have any problems with two obstacles, but standing parallel to it and behind an obstacle is giving me a headache. Did you ever find a reliable way to fix this?

  • @toddkronenberg4126
    @toddkronenberg4126 3 місяці тому

    This was great. I watched that Game Endeavor AI video you mentioned like last week, but your video went into detail how to actually do this stuff! Can't wait to try to build this sort of thing myself!

  • @xmanavenger1728
    @xmanavenger1728 13 днів тому

    that looks super cool ima add it the the growing list of very complicated things ima implement later

  • @Davixd3
    @Davixd3 Місяць тому

    Very good video! I understood it completely and was able to implement it into my game, thank you!

  • @jakewaitart9507
    @jakewaitart9507 3 місяці тому

    This was so cool! I’ve only been getting into game dev for the last few months in godot, been making a top down maze crawler game and I’m 100% going to try to apply these concepts to the enemies in it.

  • @aditigro8974
    @aditigro8974 Рік тому

    Thank you for this amazing all-encompassing video. You break down the process of building a rather complex AI into digestible bits and you give a proper view of the whole thing with just the right amount of details. Now I can begin to implement these concepts without the fear that I'll make a mess of them. In short, this is exactly what I was looking for. Truly a life saver

  • @tigerwarrior2309
    @tigerwarrior2309 5 місяців тому +1

    Thanks for the video! You just helped me figure out an issue I've been having with connecting Utility AI and State Machines.

  • @_gamma.
    @_gamma. 2 роки тому +5

    Hahahaha that herd joke caught me so off guard

  • @randykava6445
    @randykava6445 2 роки тому +1

    Very well done, Jackie! Fun but very educational too. Gave tech details that made sense with good graphic examples.

  • @Pokedubness
    @Pokedubness 2 роки тому +3

    This was a great video, really concise explanations and the editing was top tier. great job!

  • @buggit
    @buggit 4 місяці тому

    This is awesome! I've seen the video from Game Endeavor and have been looking for a script that does that since, but this video made it easier to understand the process. I've actually added onto this by making the enemy able to detect all obstacles in a radius and have that affect them similar to how the enemy tracks down the target. So thanks!

  • @moigncoin4870
    @moigncoin4870 11 місяців тому +1

    What a great video, thanks for the upload

  • @micahcarter1332
    @micahcarter1332 7 місяців тому

    Your explanation of advanced concepts such as this is incredible! You seem to have a talent for teaching

  • @ericomfg
    @ericomfg 2 роки тому

    tyvm, this was so enjoyable. extremely talented, earned my sub!

    • @JackieCodes
      @JackieCodes  2 роки тому +1

      I appreciate it, was a blast to make!

  • @demonpandagang
    @demonpandagang 2 роки тому +2

    Glad that Jidion showed love to this channel

  • @godcraftsden
    @godcraftsden 2 дні тому

    Neatly explained and accurate. As an aspiring game designer and a fairly seasoned programmer I can tell you know your stuff and put a lot of effort on this. Keep up the good job!

    • @JackieCodes
      @JackieCodes  День тому

      @godcraftsden thank you so much for the kind comment, good luck with the implementation!

  • @TheSlimHim
    @TheSlimHim 2 роки тому +3

    I just saw the Game Endeavor video a few days ago and put on my todo list to look into how he implemented it. I can't thank you enough for making this video! I am still a little confused as to when to add together interests. Do you add the interests arrays all together then subtract from danger or do you get the contexts maps and add them all together?
    Like this?
    1. Normalize a vector to what the AI desires.
    2. Make an array that is the dot product of that vector with all the 8 directions.
    3. Repeat steps 1-2 for all points of interest.
    4. Make danger array/
    5.. Make a new array where you subtract element 1 in interest from element 1 in danger, and so on for element 2-8. AKA danger minus interest. This gives you the context map.
    6. The highest value in the context map is the most desired direction.
    7. Apply steering to get a more natural most desired direction.
    8. Tell AI to go in the direction from step 7.

    • @JackieCodes
      @JackieCodes  2 роки тому +2

      you add all the interest arrays together first, you should only have 1 context map array. And when you add all the interest arrays together, if you have a number thats greater than the number you put for the danger, than that means you need to raise the danger away. I said 5 was good for me but if you have like 6 interest arrays, you might want to raise it. Hope this helped, sorry for the late reply, I'm a mess :) feel free to ask more questions and lmk how you implementation went!

  • @zachdoesdev2002
    @zachdoesdev2002 7 місяців тому

    This is the video that finally made the interest array stuff click for me!! Thank you!

  • @manancialgd.
    @manancialgd. 5 місяців тому +1

    What Endeavor did in his video was, when the AI get's close to the player. it will change the shape of the dot product, so it will change the desirability. as:
    float changedDot = 1 - Mathf.Abs(dot - 0.65f).
    you can also make it run a little to the side with:
    float changedDot = 1- Matg.Abs(-dot)
    it's the shaping part of the video. You didn't mention that

  • @tiredboiiii8362
    @tiredboiiii8362 2 роки тому +1

    Jiddion really boosted her subs good shi jackie keep it up

  • @Exonfang
    @Exonfang 5 місяців тому

    Incredibly helpful video. Can't wait to use context steering in my own AI!

  • @takoyaki_1i
    @takoyaki_1i Рік тому

    I've been looking for a good godot tutorial on context based steering for a while and I have no Idea why this video only got recomended to me now. But Im glad it did eventually because it's the best!!!!

  • @wikdpi
    @wikdpi Рік тому

    Wow, very nice explanation and implementation. Good job!

  • @shaolinfantastic9118
    @shaolinfantastic9118 Рік тому +1

    This video just single-handily reignited my passion for coding which I lost after getting a C+ in my programming college course. Thank you Jackie!

    • @micahrobbins8353
      @micahrobbins8353 5 місяців тому

      Hey, one more plus and you're golden

    • @idiot528
      @idiot528 Місяць тому

      I read that as C++ programming college course

  • @nonamecorn2538
    @nonamecorn2538 11 місяців тому

    this is so useful thank you very much i always wondered how to make interest based steering system

  • @bekturbektenov1707
    @bekturbektenov1707 5 місяців тому +1

    8:16 how we get current velocity?)))))) Sorry)))))

  • @slanqem
    @slanqem 2 роки тому +1

    great video Jackie

  • @Skeffles
    @Skeffles 2 роки тому +2

    Great video! It's cool to hear about state machines you used.

  • @scuffedgamedev
    @scuffedgamedev 2 роки тому +1

    OH WOW i didnt realise the Ancient greeks had this advanced AI, you will learn something new with Jackie every day!!

  • @dfa2691
    @dfa2691 2 роки тому +1

    Nice video!
    Be careful that state machines can become really complex quite quickly.
    One approach is to have a state machine for each state, if you plan in having complex AI.
    If, for example, an enemy wants to have an injury state that differs from when it is in combat or idle, you could need a substate machine, isolated from the main one.
    As someone else suggested, Behaviour Tree is more manageable than state machines and allow for having even really complicated AI under control.

  • @RealFosi
    @RealFosi 2 роки тому +2

    i’m glad jidion put me on 🙏

  • @randomjimbitz512
    @randomjimbitz512 4 місяці тому

    The thumbnail is the only reason I clicked on this vid... glad I stayed lol

  • @sonicrocks2007
    @sonicrocks2007 3 місяці тому +1

    You should add actual military formations to the ai

    • @JackieCodes
      @JackieCodes  3 місяці тому

      @@sonicrocks2007 cool idea!!

    • @sonicrocks2007
      @sonicrocks2007 3 місяці тому +1

      @JackieCodes the ai you could circle around you, or go line for formation and then put archer in back so you have to fight 5 melee guys before getting to the archerer etc. Making it way more difficult. Lol if you do you should do a tutorial

    • @martincout
      @martincout 3 місяці тому

      That's really cool! I'm gonna try to do that

  • @micahrobbins8353
    @micahrobbins8353 5 місяців тому +2

    You really lost me at the steering behavior bit. The array and raycast stuff was great and fairly easy to follow though

  • @uncle_mayy
    @uncle_mayy 2 роки тому +11

    JIDION GANG LESS GOOOOOOO

  • @xhenryx14
    @xhenryx14 2 роки тому

    Loved the video! Gracias Jackie!

  • @lawrenicium2845
    @lawrenicium2845 Рік тому +2

    Great tutorial although there's a major flaw that I encountered. The enemies can get stuck between two directions when you get them behind a wall and stand directly behind the wall so they can't prioritize which way to go and they alternate between two vectors indefinitely. This isn't much of a problem if the game in question doesn't have many obstacles (such as your game) but if your game has many sharp corners and tight spaces (which was the case in mine) it can be a serious headache for you.
    Though it's not without it's solutions. One way I found to combat this problem was to use pathfinding2D in a way. I connected a navigation agent to the enemy and got it's next path's vector after which I got it's dot product with the raycast vectors to figure out which direction was the most similar to the next path location. I then got the index of the closest one and added a number to the corresponding index on the interest vector. It may look jaggy at first but by tuning the number you have added to the interest vector you can smooth it out.

  • @user-yo6jm8vw3q
    @user-yo6jm8vw3q 5 місяців тому +1

    is there a code example anywhere of this?

    • @idiot528
      @idiot528 Місяць тому

      I mean the explained concepts are pretty simple to implement just try implementing on your own and then use stack overflow and reddit if you need help.

  • @filopuk
    @filopuk 2 роки тому

    Didn't know you are such a talented dancer, Jackie! :D Good job, the video is wonderful :)

  • @levizin917
    @levizin917 3 місяці тому

    I implemented, got a problem with it on getting stuck between two objects and my tip is do the neighbour danger values such as it doesn't sum up to 1, this way even tho a path may be dangerous if the enemy is on that side you need to go reach him, if enemy avoids completely it will end up stuck going back and on again

  • @MCNeko6554
    @MCNeko6554 3 місяці тому

    I really wish there was a link to find out more about the AI part. I already know how to do the state machine part, but I'm struggling to implement the AI pathing. I get that there's a set of 8-directional raycasts and an 8-directional vector array that detects objects within the path. However, translating that in Step 1 to an actual AI path is just a bunch of ???? to me. On top of that, the "Navigation2D" node has been deprecated, so I guess NavigationAgent2D is the closest match..

  • @JahznCentral
    @JahznCentral Рік тому

    that steering force function saved me hours of googling thank youuu

    • @awesomewow668
      @awesomewow668 2 місяці тому

      how does the steering function work?

  • @neptun3189
    @neptun3189 7 місяців тому

    this was fantastic, ty

  • @panhoracy8254
    @panhoracy8254 2 роки тому +1

    I remember when I was figering it out, about few months ago. I used those exact technics. I recommend checking behavior trees. It is a modification to state machine that fits game AI needs very well. In Godot recently addon was created implementing behavior tree, it's named BeeHave. Imo it simplifies working with states

    • @JackieCodes
      @JackieCodes  2 роки тому

      Oo sounds cool, gotta check it out, thanks!

  • @MrJuniorDuck
    @MrJuniorDuck 7 місяців тому

    Thank you for the amazing video. It works fantastically, one question I had was while implementing FSM with steering, I wasn't sure how to implement the two while trying to decouple them. Would the states be in charge of handling the velocity of the CharacterBody2D or the steering script?

  • @Shinzatso
    @Shinzatso 10 місяців тому

    How well does this translate to 3D enemies?

  • @wsixfour8556
    @wsixfour8556 2 роки тому +1

    8:06 W RIZZ

  • @sporfworfel
    @sporfworfel Місяць тому

    At 4:01 it's confusing because you say "subtract the interest from the danger" but you're subtracting the danger from the interest.

  • @svetlinsvilenov8739
    @svetlinsvilenov8739 2 роки тому

    Noice! I found out we have that Game AI Pro book series in the work library, and I'm going through the first one :)

    • @JackieCodes
      @JackieCodes  2 роки тому

      Omgggg!! So lucky! Lmk how it is!

  • @_gamma.
    @_gamma. 2 роки тому +1

    Also FYI Godot 3.5 has a new navigation server with obstacle avoidance 😄 It’s nice, but this implementation is really interesting! I like how flexible it is. And that state machine setup is really nice!

    • @JackieCodes
      @JackieCodes  2 роки тому +4

      I already used it and it wasnt working and one of the devs told me not to use nav avoidance on static colliders....

    • @_gamma.
      @_gamma. 2 роки тому

      @@JackieCodes my bad, probably just for basic collision, I really like your solution! That weighted values for different obstacles blew my mind when you made the edges of the arena “dangerous”

  • @thawzan7370
    @thawzan7370 Рік тому

    Hi! Great video but do u think u can go more indepth into the explanation on the steering force? That will be awesome!. Thanks a bunch!

  • @rholyoak
    @rholyoak 2 роки тому

    Really clever work on the steering behaviours and state machine.

  • @walkermains7396
    @walkermains7396 2 роки тому +1

    Congratulations with the jidion video

  • @xaeCarolina1865
    @xaeCarolina1865 2 роки тому +1

    Jidon crew here boys

  • @WhatnotArt
    @WhatnotArt 2 роки тому

    This is going to be the next Terminator, I swear.
    As an aspiring game developer, I found this really awesome and helpful

  • @ChewwwyPens
    @ChewwwyPens 9 місяців тому

    Hello, I'm still a pretty novice gamedev using Godot and can follow along with this guide until I get to the "Dangers" section. For the life of me, I can't figure out how to get the raycasts to change the values within the Danger Vector array. I've been at this for about two days now and have been spending most of my free time scouring the internet for trying to find answers.
    I've tried;
    - Creating the raycasts outside of the code like in the video, putting into their own array and checking is_colliding() on each of them in a for loop, but that just returns an error saying is_colliding isn't a function in the base.
    - Generating them through code in a few different ways, appending them into a raycasts array and then checking if each is colliding but that doesn't work either.
    - I got a bit of progress by referencing each raycast in their own onready var and then checking if their colliding and changing the values manually like below, but then I run into a problem where they're constantly overriding the value's other collisions set.
    ○ If _0.is_colliding:
    § danger_vector[0] = 5
    § danger_vector[1] = 2
    § Danger_vector[7] = 2
    - And on top of that, after getting it working somewhat, when I try to get the Context Vector by subtracting the values in the Danger Vector from those in the interest Vector, I keep running this error or errors like this "Invalid set index '0' (on base: 'Array[float]') with value of type 'float'"
    I don't know if I'm overthinking or overworking it but I just can't seem to get it to work properly. Is there any way you can share your process for how you got this done with some example code? Anything would be much appreciated.

    • @richardbutt8258
      @richardbutt8258 8 місяців тому

      I was getting the same invalid set index 0 errors as well, and fixed it, but don't fully understand what's going on. I read that if you declare an empty array, there will be no index 0. So, I thought, okay, declare the arrays with a bunch of zero placeholders (i.e. var danger_array = [0,0,0,0,0,0,0,0]). That worked for the danger array and context array, but not for the interest array. Maybe I had a typo somewhere. Dunno. Regardless, I switched to . append for the interest array (i.e. interest_array.append(var) ) , and made sure to clear the array after every cycle (i.e. interest_array.clear() ). The following is my code for the danger array.
      for i in range(8):
      if raycast_array[i].is_colliding():
      if i == 7:
      danger_array[6] += 2
      danger_array[7] += 5
      danger_array[0] += 2
      else:
      danger_array[i-1] += 2
      danger_array[i] += 5
      danger_array[i+1] += 2

    • @DwarvenStudios
      @DwarvenStudios 5 місяців тому

      You need to fix the is_colliding() issue because thats probably the best way to do it, I did it simmilarly to what you mentioned, defined an array with the raycasts, and an array with the danger values, all initially set to 0; then, for each raycast, i checked whether it was colliding, and if it was, I set a variable containing the index of said raycast, so I could change the values in the danger array on the corresponding index (for example, if it was the 5th raycast, I would update the 4th, 5th and 6th values to 2, 5, 2) with an if statement checking whether the values have already been set (for example if the player entered 3 raycasts, it would only update the values assignes to 2 and 0, and leave the 5's so it doenst get all messed up).
      If you havent already fixed it and my explanation makes 0 sense (very possible), I could send you the gdscript code so you can see what I actually did. Hope this helps.

  • @brock6156
    @brock6156 2 роки тому +1

    I’m here because of Jidion (aka chad Gibbs) keep it up Jackie 😎👍🏻

  • @BankruptGreek
    @BankruptGreek 9 місяців тому

    I implemented this, the caviat is that it doesn't work that great for enclosed areas, the ai will get scared of doors since the diagonals will hit a wall but not the straight path through

    • @JackieCodes
      @JackieCodes  9 місяців тому

      sometimes it needs adjustments, like messing around with the length of the raycast?

    • @BankruptGreek
      @BankruptGreek 9 місяців тому

      @@JackieCodes I am not sure I played with it for like 1-2 hours, the bane of it is a single door with multiple enemies. You can get them to not be scared of doors but then they will get stuck in an angle.
      An other issue with many of them, is that they ping pong on each other, making the insentive lobsided will make them rotate but again there will be a way where they will rotate and sync to each other to block themselves from doors.
      I think I ll hard code it, put a detection zone around doors and queue them in a deterministic fashion

  • @Alex5000148
    @Alex5000148 Рік тому

    Hello, I wanted to ask for your advice. How to program an NPC to understand if it's path is blocked? For example, if the player stands in the doorframe.

  • @nunezgeeked1650
    @nunezgeeked1650 2 роки тому

    Love this

  • @wrobertz
    @wrobertz 2 роки тому +1

    Jidion said hi

  • @steinarst9084
    @steinarst9084 9 місяців тому

    Before I go back and rewrite my enemy AI/PathfindingObstacleAvoidanceSpaghetti I wanted to drop a comment and thank you. Thank you for showing me this brilliant idea.
    Signed, fullstack developer for 20y+ trying gamedev as a hobby 👍❤

  • @Lamperkat1
    @Lamperkat1 11 місяців тому

    Great explanation thank you :)

  • @johnsophusson
    @johnsophusson 2 роки тому +1

    man u gained 25k subs, all hail jidion

  • @dashiscool5
    @dashiscool5 2 роки тому

    I am a discord bot and web developer and i am tryiing to get into web developement. I am going to watch your videos once i get done with my bot, keep it up!!

  • @Senpai-Choco
    @Senpai-Choco 2 роки тому +1

    Hey I came from jidion i dont know much about coding but nonetheless this is really interesting keep uo the good work

  • @sevside
    @sevside 2 роки тому

    Great job Jackie I don’t know what any of this means but. In the future I do plan on learning since my childhood dream is to make a game and I will make sure to revisit your channel for any help I may need along the way!☺️

  • @imaginelee2082
    @imaginelee2082 2 роки тому

    top tier content

  • @Jake-lb5wp
    @Jake-lb5wp 2 роки тому +9

    Jidion gang

  • @driver3899
    @driver3899 Рік тому

    Topic: Cool
    Information: Super useful
    Embarrassment while green screening: Amazing

  • @four2417
    @four2417 2 роки тому

    nice vid!

  • @drxpoutk2517
    @drxpoutk2517 2 роки тому +1

    Came from jidion W UA-camr‼️‼️

  • @qarrett
    @qarrett 2 роки тому

    Hey Jackie! Loved the video, I'm curious though, based off your game coding experience how long would a game like Terraria take to build? Years worth of work and effort? Huge fan of the game and always wondered how long a 2D game like that would take to design. Not counting updates haha! 😇💙

    • @JackieCodes
      @JackieCodes  2 роки тому +1

      I feel really guilty saying this but ive yet to play terraria! 🙈 its in my steam library so i will come back to you on that.

  • @brandonpuget6034
    @brandonpuget6034 2 роки тому

    from Jideon with love

  • @onlyenzoYT
    @onlyenzoYT 2 роки тому +1

    Hey im here from Jidion You’re W UA-camR

  • @tgskingmeeks1731
    @tgskingmeeks1731 2 роки тому

    🔥🔥🔥

  • @mijkolsmith
    @mijkolsmith 2 місяці тому

    My enemies seem to incrementally speed up because of velocity = velocity + steering force

    • @mijkolsmith
      @mijkolsmith 2 місяці тому

      limiting the max velocity seems to help, by the way what would be a good value for the steering value?

    • @awesomewow668
      @awesomewow668 2 місяці тому

      @@mijkolsmith he can you help me with local vectors

    • @mijkolsmith
      @mijkolsmith 2 місяці тому

      @@awesomewow668 go ahead and ask the question you have instead of asking if you can ask one

    • @awesomewow668
      @awesomewow668 2 місяці тому

      @@mijkolsmith around 3:03 how can I get the local vector? with the local_to function

    • @mijkolsmith
      @mijkolsmith 2 місяці тому

      ​@@awesomewow668 it's also called the direction vector. To get it, subtract the position from the goal position. In GdScript: (player.get_global_position() - enemy.get_global_position()).normalized()

  • @therealrah
    @therealrah 2 роки тому

    Lets gooooooo

  • @prismatic1987
    @prismatic1987 2 роки тому +2

    Came from jidion

  • @Sharkybugzz
    @Sharkybugzz 2 роки тому

    That’s so cool! But can u do it on a MacBook? + I really like ur videos they give me Michael reeves videos but much more relaxed lol:)

    • @JackieCodes
      @JackieCodes  2 роки тому +2

      Of course u can! I initially developed this game using a mac mini and then i switched to windows :)

  • @unterforderung
    @unterforderung 2 роки тому

    great vid

  • @rarejinxy8633
    @rarejinxy8633 2 роки тому

    W Jackie

  • @Bootifullyx
    @Bootifullyx 2 роки тому +1

    Here from Jidion, you're the loveliest lady! Xxx

  • @moistduck8621
    @moistduck8621 2 роки тому +1

    From jidion 💕

  • @Smooveywoo
    @Smooveywoo 2 роки тому

    W creator

  • @elmega23
    @elmega23 5 місяців тому

    nice video

  • @datboidave1775
    @datboidave1775 2 роки тому +5

    from the jidion video

  • @drksolo
    @drksolo 2 роки тому

    jidion w

  • @leocheng9773
    @leocheng9773 Рік тому

    Pog

  • @manuelvalderrama8175
    @manuelvalderrama8175 5 місяців тому

    Cool video.
    please, more code, more dances, more numbers, less auto-hate

  • @bekturbektenov1707
    @bekturbektenov1707 5 місяців тому

    tis wanderfull, but I still can not figure it out in my code)))))