Godot 4 Crash Course for Beginners - GameDev 2D Top Down Tutorial

Поделиться
HTML-код
  • Опубликовано: 24 янв 2025

Комментарии • 648

  • @willisplummer
    @willisplummer Год назад +626

    In Godot 4.1, they've changed the way the state machine transition arrows work in the AnimationTree flow chart (where you draw the lines to show which states transition to which). They now default to automatic, which causes it to cycle through all of the animations really fast and basically look like nothing is happening. To fix, select the arrows between idle and walk and in the Inspector, under Advance, change mode to Disabled

    • @papapixxel7860
      @papapixxel7860 Год назад +30

      You're the man! Just stumbled upon this bug and found this comment!

    • @aryantzh2028
      @aryantzh2028 Год назад +7

      thanks!

    • @liamallan12345
      @liamallan12345 Год назад +12

      Absolute legend

    • @TheSearchForAwesome
      @TheSearchForAwesome Год назад +9

      You sir are a gentleman and a scholar

    • @vasarolnik
      @vasarolnik Год назад +3

      Thank you!! I was about to ask this, cause it was erradically switching between the two states.. You're the man!!

  • @bungofungus
    @bungofungus Год назад +343

    37:37 for people using the full release of godot 4, the ≠ used in the code can be typed out using !=. They do the same thing, but the engine can read !=

  • @quintinwood4397
    @quintinwood4397 11 месяцев назад +53

    A quick reminder with movement vectors is to use the normalized() function. So when we made the input_direction for the player, just add a .normalized() at the end of the closing parenthesis :
    var input_direction = Vector2(
    Input.get_action_strength("right") - Input.get_action_strength("left"),
    Input.get_action_strength("down") - Input.get_action_strength("up")
    ).normalized()
    if you don't do this you'll notice your player moving a lot faster if you walk diagonally. Normalizing makes it where your speed is always 1 rather than the 1.4 you get otherwise.

    • @dk-sky3820
      @dk-sky3820 11 месяцев назад

      Came here to say exactly that but I was sure someone mentioned it in the comments! Cheers)

    • @antodarell-brown6516
      @antodarell-brown6516 10 месяцев назад +1

      im having an issue with that exact part but instead it says "Expected closing ")" after call arguments."
      any advice?

    • @quintinwood4397
      @quintinwood4397 10 месяцев назад +3

      @@antodarell-brown6516 double check your parenthesis. You might have a missing one or an extra one. Sometimes it's easy to overlook.

    • @queehosu3643
      @queehosu3643 9 месяцев назад

      @@antodarell-brown6516 i overlooked a the comma a comma and got the same error.

  • @grandtheftaudio2912
    @grandtheftaudio2912 Год назад +164

    Great tutorial, thanks for sharing.
    There is a minor problem with walking diagonally (walking in two directions at the same time, e.g. up and left). The input direction vector will be a bit longer than the vector when only walking in one direction. The effect will be a slightly higher walking speed when walking diagonally. This is because the diagonal d in a square is d = a * sqrt(2) when a is the length of the squares sides.
    To fix this problem, when calculating the velocity of the character, instead of "input_direction * move_speed" use "input_direction.normalized() * move_speed".

    • @jeeves4490
      @jeeves4490 Год назад +8

      Thank you so much, this needs more likes

    • @591mlstudiosgames
      @591mlstudiosgames Год назад +2

      Absolute legend. 👍

    • @JLLockwood
      @JLLockwood 10 месяцев назад +1

      thank you soooo much

    • @Smiff248
      @Smiff248 2 месяца назад +1

      it broke my code and now the player keeps dissapearing until it's completely gone and I can't fix it even tho I changend it back to the original code again. yeah... :')

  • @FeralFreyaForreal
    @FeralFreyaForreal 2 года назад +183

    Hey! Godot 4 actually has a bunch of new Input methods that I think you should check out in the docs! I haven't watched the whole video yet (work) so forgive me if you mention this in the video. Anyways, two new ones that are very useful are Input.get_axis and Input.get_vector. These are basically shorthand for Input.get_action_strength("positive action") - Input.get_action_strength("negative action") but in one function. Input.get_axis is for platformer-type movement (left and right) while Input.get_vector is for top-down type movement (up, down, left, and right). You just pass the positive ("right") and negative ("left") actions and it returns the proper input. Great video so far! I can't wait to finish it!

    • @EvgeniyBerlin
      @EvgeniyBerlin 2 года назад +1

      Nice catch!

    • @tadeuszr359
      @tadeuszr359 2 года назад +24

      velocity = Input.get_vector("left", "right", "up", "down") * SPEED
      sweet

    • @ThundfinTTV
      @ThundfinTTV 2 года назад +3

      Game changer for movement

    • @haddock8087
      @haddock8087 Год назад +4

      @@tadeuszr359 Actually Input.get_vector("left", "right", "up", "down") doesn't have the exact same behavior, as diagonal vector is equal to (0,707, 0.707), whereas with the original implementation, it's (1,1)

    • @PretendCoding
      @PretendCoding Год назад +6

      @@haddock8087 So wouldn't you just instead normalize it before you multiply it by the speed? That would take care of the issue.

  • @veldtwalker
    @veldtwalker 2 года назад +139

    Might have been me, but a couple notes since some stuff have changed since this was recorded. So hopefully this helps some people.
    I am using - v4.0.beta13
    - Some of the inspectors have changed slightly, so just open up some the other caret/caron menus ">, v" (not sure the term, haha) and you might find the option you are looking for.
    - Animation Tree for each connection "->-" between idle and walk, click on them, Inspector>Advance>Mode, Set to "Enable", keep the "Start"->-"Idle" as "Auto" || Looking at the tutorial I noticed the interface for AnimationTree was different, so poking around and that is how I fixed it.
    - As pointed out in the comments if you can't easily type ≠ you can type != instead (plus some dummies ruined ≠ )
    I may have missed it being mentioned but for the cow animations you add "Animation>[animation]" and not "BlendSpace2D" like you did with the playercat animation

    • @MOAMMAN20
      @MOAMMAN20 Год назад +1

      Thank you for tips man

    • @guedizz
      @guedizz Год назад +1

      Very useful tips! It now worked for me!

    • @Vaznis
      @Vaznis Год назад +2

      good shout on the animation tree tweaks

    • @MagicalAlpaca
      @MagicalAlpaca Год назад

      I wish I could express how thankful I am for U telling us. Those were the 2 things I was confused about.

    • @taskinen1j
      @taskinen1j Год назад

      Thanks for this. I had trouble with animation tree.

  • @crack64
    @crack64 2 года назад +43

    This tutorial is fantastic, you get into exactly the right amount of detail for everything, love it!

  • @Drachenbauer
    @Drachenbauer Год назад +8

    About the cows: with the fixed values for the timers they'll idle all the same time and walk all the same time.
    It looks more natural, when you generate theese values with a randomized range, maybe 1-3 secconds walk and 4-8 seconds idle.
    so they´ll act compleetely individual and not more all stand and than all walk.

  • @sprite9849
    @sprite9849 Год назад +14

    around 22:00 if velocity is not working for you, as it didn't for me, try this code. Hope it helps :)
    extends CharacterBody2D
    const SPEED = 100.0
    func _physics_process(_delta):
    var xInput = Input.get_axis("left", "right")
    if xInput:
    velocity.x = xInput * SPEED
    else:
    velocity.x = move_toward(velocity.x, 0, SPEED)

    var yInput = Input.get_axis("up", "down")
    if yInput:
    velocity.y = yInput * SPEED
    else:
    velocity.y = move_toward(velocity.y, 0, SPEED)

    move_and_slide()

    • @Inf3rnoBadger
      @Inf3rnoBadger Год назад +1

      Thanx the code helped around 38:28 how did you get this code to work with the update_animation_parameters for movement. he uses the input_direction like update_animation_parameters(input_direction) I tried to use yInput and xInput but i got an error Cannot convert argument 1 from float to vector2 idk most of this goes over my head right now lol

    • @sprite9849
      @sprite9849 Год назад

      @@Inf3rnoBadger yeah, that were I stopped the tutorial today, my brain can't handle that today :D I'll continue in the following days and hope that I'll find a solution

    • @sprite9849
      @sprite9849 Год назад +5

      @@Inf3rnoBadger Hey Sean, not sure what happened but today the code from the tutorial worked fine for me. Maybe it has something to do with the Steam Version of Godot. To save you some typing, this is the code that worked :)
      extends CharacterBody2D
      @export var move_speed : float = 300
      @export var starting_direction : Vector2 = Vector2(0, 1)
      @onready var animation_tree = $AnimationTree
      @onready var state_machine = animation_tree.get("parameters/playback")
      func _ready():
      update_animation_parameters(starting_direction)
      func _physics_process(_delta):
      var input_direction = Vector2(
      Input.get_action_strength ("right") - Input.get_action_strength ("left"),
      Input.get_action_strength ("down") - Input.get_action_strength ("up")
      )

      update_animation_parameters(input_direction)

      velocity = input_direction * move_speed

      move_and_slide()
      pick_new_state()


      func update_animation_parameters (move_input : Vector2):

      if(move_input != Vector2.ZERO):
      animation_tree.set("parameters/Walk/blend_position", move_input)
      animation_tree.set("parameters/Idle/blend_position", move_input)

      func pick_new_state():
      if(velocity != Vector2.ZERO):
      state_machine.travel("Walk")
      else:
      state_machine.travel("Idle")

  • @tittlemans_crest
    @tittlemans_crest Год назад +19

    39:54 If you are having trouble getting your animations to travel between states in 4.1.3, adjust the call by added an additional parameter of false: state_machine.travel("Walk",false) state_machine.travel("Idle",false)

  • @hashtagzema
    @hashtagzema Год назад +64

    If at 19:09 you are not getting the debugger to see your key commands... Double check that you put a comma at the end of line 6, after the left command and before the down command. I missed his comma in the video myself. This was the solution. Hope that helps for someone else.

    • @jamesreed361
      @jamesreed361 Год назад +2

      Thank you so much, totally missed that lol.

    • @moni1726
      @moni1726 Год назад +2

      thank you so much!! you’re literally a lifesaver

    • @Pilot_V
      @Pilot_V Год назад

      Thank you so much

    • @Ryeniken
      @Ryeniken Год назад +1

      Exactly my issue :)
      This was quickly followed by another error on the "print line". Turns out, indentation is important! My "print(input_direction)" needed an additional indent to fall under the func _physics_process(_delta):
      I'm used to c#, so this is a bit different, but I'm liking the logic behind it so far

    • @bestenderslayer9302
      @bestenderslayer9302 Год назад

      u should tell me the full code tottaly

  • @quintinwood4397
    @quintinwood4397 11 месяцев назад +5

    try enabling delta in the cow physics process and using move_and_collide(velocity * delta) for cows. This will make it where they don't cling to your player's collision box and they'll also stop if they run into you.

  • @Moohasha1
    @Moohasha1 Год назад +3

    I followed a tutorial series for Godot 3.2 that included how to use a TileMap and TileSet. When I tried to use one in Godot 4.1, it was completely different and I had no idea what to do. Thanks for explaining it!

  • @nat9504
    @nat9504 2 месяца назад +1

    Even with this tutorial being 2 years old, and even with me using Orchestrator rather than GDScript, this tutorial was really helpful, so thank you for making it!

  • @Drachenbauer
    @Drachenbauer Год назад +6

    33:10
    in godot 4.2 the advance mode of animation tree transitions is a bit different.
    Now it is set to "auto" by default and has also the options "enabled" and "disabled" to choose instead.
    So let the first transition like it is and set the other two, between the two blend_state_2d elements (idle and walk), to enabled.

  • @honeycoffeeandmilk996
    @honeycoffeeandmilk996 Год назад +136

    The animation tree is different now 🥲
    Edit:
    if the animation is not working try this: delete the connections between start, walk and idle. Next to Transition select "immediate" and the arrow-box (?) should be blue. For the transitions between idle and walk the arrow-box (?) should NOT be blue

    • @kylelapraim6630
      @kylelapraim6630 Год назад +9

      thank you I was having issues figuring out why my animation was so freaking fast lol

    • @LunaReviewMats
      @LunaReviewMats Год назад +3

      Thanks. This had me stumped for an hour.

    • @Rizma44
      @Rizma44 Год назад

      tyty!💜

    • @hashtagzema
      @hashtagzema Год назад +1

      Hi, I am a dummy and don't understand. Mine is flashing super fast too, but I don't know how to fix transitions and the debug still has my Cat static.

    • @Rizma44
      @Rizma44 Год назад +21

      @@hashtagzema Click "Connect Nodes" button. Next to the "Transition:" label select "Immediate" from the drop down menu. Next to the drop down menu there is a new button with the letter A with an arrow highlighted in blue. Honey was saying unhighlight that new button for the walk transitions. I am assuming so it doesn't Auto Advance? Hope this helps! ♥

  • @daniridao
    @daniridao 2 года назад +13

    I've been testing godot 4 for a bit, so I new all this stuff, but I have to say I could have used this video when I started with Godot, or something similar back then. It comprises a lot of different things that are very useful for beginners, so this is a 5/5. Very much appreciated the effort, it's great seeing people making Godot tutorials!

  • @Onox4
    @Onox4 2 года назад +41

    A small problem with the script for the cow as shown in the video is that in select_new_direction, it’s possible to get (0, 0) and when that happens, the cow will appear as not moving but will still have its walk animation shown (this can be seen for example at 1:02:52 with the top right cow)

    • @skateryuri2
      @skateryuri2 2 года назад +1

      me too :(

    • @goblinslayer5404
      @goblinslayer5404 Год назад +3

      a simple fix would be to call the select_new_direction function if the x and y of move_direction are 0. just do that right after it creates the random vector. It's almost like ur creating a loop out of a method, similar to recursion.

    • @CLASSiv04
      @CLASSiv04 2 месяца назад

      for any still having this problem. I fixed this by adding the following code directly after the final parentheses of func select_new_direction. New line: while move_direction == Vector2(0, 0):
      move_direction = Vector2(
      randi_range(-1,1),
      randi_range(-1,1)
      )
      Just add it in between the initial code and the sprite.flip_h part and it should prevent (0,0) from being an outcome by force-looping the function until a new result is found.

  • @Lee_Tia
    @Lee_Tia Год назад +33

    it seems that this is now a bit outdated in some points, but it was still amazing to see my creations come to life! I do not think i understand anything of the coding yet, but there is much to learn~

  • @MatthewKanwisher
    @MatthewKanwisher 2 года назад +6

    Thanks!

  • @Zantom07
    @Zantom07 2 года назад +6

    Thanks for the video, very informative! I'm new to Godot but not new to game dev, so this was a great way to get up to speed with how Godot works differently from other engines.

  • @zflxw
    @zflxw Год назад +8

    Also, another thing: If you want a smooth camera follow without jitters, you simply have to do following:
    1. Enable the "Position Smoothing" and enter a value (5px/s is good for me)
    2. Change the Process Callback in the Camera2D Settings to "Physics". This will remove the jitter!

  • @Telorath
    @Telorath Год назад +5

    I don't know if godot handles this properly(pretty new to godot), but in most engines one of the most important things NOT to put in the physics step is taking player input. It shouldn't matter much in a "hold to move" scenario, but if for example you're trying to jump from platform to platform, it's possible to press and release the jump button BETWEEN physics updates, causing your input to be occasionally ignored while performing actions that require precise timing.

    • @snowy893__
      @snowy893__ Год назад +1

      what would you recommend as an alternative? im new to godot and game development in general

  • @Maksimmy
    @Maksimmy 11 месяцев назад +4

    Trying to follow in 2024. Having trouble with the first script, trying to get directions implemented. Seem to be having some trouble with indentation? Despite following the code pictured exactly at 19:19

    • @spade2945
      @spade2945 11 месяцев назад

      Im also having trouble with that, dont know how to fix it

  • @niorad
    @niorad 2 года назад +6

    Thanks! Perfect for a first look at Godot without xp with 3, but not wanting to start with 3 since 4 is right around the corner.

    • @laptoprelaks
      @laptoprelaks Год назад

      this is exactly where I'm at lol...

  • @nikitareich7617
    @nikitareich7617 Год назад +2

    you worked 7 hours straight! Respect

  • @ulgrimthemad
    @ulgrimthemad Год назад +2

    A bit has changed for 4.1.3, but clicking on everything roughly where Chris has indicated lets you find most things.
    willisplummer in the comments here hit the nail on the head for the biggest issue which is the transition between animations being enabled and flipping out, as long as you follow their direction (select arrows and in inspects under advanced change mode to disabled) you'll be fine.
    Painting collisions has an additional feature as well, in that there's a paint dropper now to get existing collision paintings from tiles which you can then modify. Helped a lot.
    The rest is just slight changes as to where you find things in the inspector.

    • @ulgrimthemad
      @ulgrimthemad Год назад

      Thanks for this great tutorial Chris!

  • @GergelyGati
    @GergelyGati 2 года назад +59

    Great tutorial!
    One suggestion: if you use a larger font and/or smaller resolution, it's much easier to follow on smaller screens.

    • @GraveUypo
      @GraveUypo Год назад

      this. i tried to follow on a small 1280x720 window on my 4k screen and it was impossible. i changed to a second monitor (well, a drawing tablet's screen), but it's 13" and it was still super hard to see.

    • @bonsaipropaganda
      @bonsaipropaganda Год назад

      yeah im bad at reading small text

    • @mrpotatocatt
      @mrpotatocatt Год назад

      You can press the ctrl and - or + keys to make the screen smaller/bigger if it helps!

    • @GustavoFernandesKing
      @GustavoFernandesKing 11 месяцев назад

      @@mrpotatocatt it doesn't zoom the video, only the browser.

  • @PlatedGuy
    @PlatedGuy Год назад +1

    Last time I tried game dev Godot was in some early 3.0 alpha I think. I saw Godot 4 release and some spark inside me lightend up and made me try gamedev again. Thank you for your tutorial man ❤❤

  • @outkastagc
    @outkastagc Год назад +3

    Oh man, I made it all the way to 48:24. I can't find the physics layer options and after scrolling through endless comments and reading the GD info, I am at a loss. I somewhat remember how to setup the collisions from 3, but I am totally lost here. Thanks for the video, I really appreciate the time and effort!

    • @ChrisTutorialsYT
      @ChrisTutorialsYT  Год назад +4

      For the tilemap I assume? You'll have to open the Tileset in the tilemap (inspector), physics layer will be the first drop down with tileset expanded. There's an add element button to add a new physics layer - first one will show up as PhysicsLayer0 when editing tiles. Then in tileset mode (button of the screen with the tilemap node selected), choose select from the tool options and then select the tile you want to give physics collisions to. Physics should be a drop down available under BaseTile now. Expand down to PhysicsLayer0 and you should see the tools for editing the collision shapes for each individual tile.
      Hope that helps a bit

    • @Smithington_
      @Smithington_ Год назад +2

      @@ChrisTutorialsYT I am not the OP, but ran into the same problem.
      Thanks for being awesome.

    • @jo.awesome
      @jo.awesome Год назад

      You have to click on the word "TileSet" not the arrow next to it. It then expands for more options. I had the same problem too and accidentally clicked there and it worked.

    • @giangargo669
      @giangargo669 Месяц назад

      thank you i was having the same isssue,and thanks to chris for answering!

  • @eduardofernandez6626
    @eduardofernandez6626 2 года назад +20

    Could you do a tutorial like this but in 3D? It would be very useful for the community, since there are no updated courses, good content! I hope you continue helping the godot community!

  • @adrianpinto1011
    @adrianpinto1011 Год назад +1

    Excellent tutorial, just what I was looking for!
    Thank you.

  • @zinnmannstudio
    @zinnmannstudio 7 месяцев назад +1

    I am pretty late, but I think this video is exactly what I am looking for, I just started Game Dev and wanted to make a game with a similar mechanic to this.

  • @dreamrider7128
    @dreamrider7128 Год назад +1

    Honestly I'm still a bit reluctant to learn godot but somehow I ended up here and before I realized I'm halfway through it following every single step and has been waaaaay easier than I even imagined (for the record I have some experience in Unity and a lot of experience in unreal).
    Other godot tutorials failed to grab my attention and I was really struggling way too much to understand the node system of godot... so I really have to thank you for this video (and I'm still reluctant to continue with godot... like I want to choose a 2D engine to make classic arcade game clones, like the timeless beat em ups such as TNMT, Xmen, Golden axe, etc... and I am still 3 doritos away from doing those in Unreal... still following this tutorial to the end)

    • @Dunkable
      @Dunkable 9 месяцев назад

      Are you still rocking with godot?

  • @brokenumbrellagames
    @brokenumbrellagames 2 года назад +40

    On which alpha version was this recorded? I'm having difficulties connecting the nodes in the animation tree (might be a bug).
    Update: If you are having issues with connecting the animation tree nodes 30:50 restart Godot and try again. It fixed it for me. ^^

  • @productionsinparadise2880
    @productionsinparadise2880 10 месяцев назад +1

    I think the only thing missing from the tutorial was the ability to enter the houses (change scenes by entering through the door on the inside and outside of the house). Haven't seen too many scene change tutorials that revolve around walking through things.

  • @Cosmicsightss
    @Cosmicsightss 11 месяцев назад +1

    At 1:02:30 if your cows are playing the idle animation without stopping(the keep sliding) in the
    elif current_state == COW_STATE.WALK :
    you can write:
    velocity = Vector2.ZERO that will fix it.

  • @taunhawk9888
    @taunhawk9888 Год назад +7

    Thanks for the tutorial! However, that animation tree is a clunky mess. Was able to handle all of that much easier with just code inside of the PlayerCat script:
    var idle_direction: String = "idle_down" # Same names as animation
    # [ PLAYER ANIMATE ]
    func player_animate():
    # Walking and setting idle direction
    if input_direction.y < 0:
    $AnimationPlayer.play("walk_up")
    idle_direction = "idle_up"
    elif input_direction.y > 0:
    $AnimationPlayer.play("walk_down")
    idle_direction = "idle_down"
    elif input_direction.x < 0:
    $AnimationPlayer.play("walk_left")
    idle_direction = "idle_left"
    elif input_direction.x > 0:
    $AnimationPlayer.play("walk_right")
    idle_direction = "idle_right"
    # Idle
    else:
    $AnimationPlayer.play(idle_direction)

  • @widearchshark3981
    @widearchshark3981 2 года назад +2

    Great video, but boy did you just hit overdrive with the cow piece !
    Really good effort though mate. Followed through slowly and learned a lot.

  • @diadantist
    @diadantist 11 месяцев назад +4

    37:28 for those having problems with the @export var starting_direction : Vector2 - Vector2(0,1), Godot 4.2.1 doesn't allow you to subtract two vector2 objects inside a variable anymore. You need to calculate first/declare the value of the variable and THEN use it, like this:
    @export var starting_direction : Vector2 = Vector2(0, 0)
    func _ready():
    animation_tree.set("parameters/idle/blend_position", starting_direction)
    Hope this helps somebody!

  • @Darkrender
    @Darkrender 2 года назад +5

    You can solve the camera stuttering a few different ways, but as of the most current beta release of Godot 4 (v4.0.beta9), you can pretty much solve the visible stuttering on the player by setting the Process Callback property on the camera to Physics instead of Idle. Another solution would be to lock the framerate of the game to 60 (or even 30) fps, since one reason for the stuttering is because of monitor refresh rate being slower than the games fps. Since most people use 59 or 60hz monitors, limited the fps to that or lower should help with the stuttering.

  • @widrolo
    @widrolo Год назад +14

    Unity refugee here

  • @Xershade
    @Xershade Год назад +3

    Not sure if this was in it at the time but for the animations instead of using the frame number just use the frame co-ordinates instead. Then when duplicating you just leave the X value alone and just change the Y value for each direction.
    Example the way my frames are setup it's a 3 frame sprite that does 4 frame animations, so the X values are 1,0,1,2 so instead of having to math all of that for the other 3 directions I just set it to frame_coords in the animator instead and just changed the Y value.

  • @chefaku
    @chefaku 10 месяцев назад +2

    50:42 is better to use the snap grid tool, that is at the right of the rotate right, flip horizontally, etc

  • @KRLYProductions
    @KRLYProductions День назад

    Im a beginner and im at 57:51, and when i run it points me to the cow script on line 33 and says: Invalid call. Nonexistent function 'travel' in base 'Nil'. pls help

  • @BulletTime1
    @BulletTime1 Год назад +3

    38:47 my animations are'nt playing? im using Godot 4.1, so it might be that, but can anyone help me?

    • @mr.squirrel164
      @mr.squirrel164 10 месяцев назад +1

      same problem, did you find a solution?

    • @BulletTime1
      @BulletTime1 10 месяцев назад

      nah sorry@@mr.squirrel164

  • @Korn1holio
    @Korn1holio 2 года назад +3

    At 15:26 - pardon for possibly beginner question, but is it wise to initialize a variable (var input_direction) inside a "_physics_process" that gets refreshed 60 times/sec ?

    • @Forcoy
      @Forcoy Год назад +3

      no, creating a new variable 60 times a second is not a very good idea

  • @КатяИванова-г4в
    @КатяИванова-г4в Год назад

    Thanks for the tutorial, I'm a total newbie to Godot and your tutorial explains a lot to me.

  • @andrewg2998
    @andrewg2998 Год назад

    Just simply a great tutorial. Please make more godot game dev content in the future!

  • @ssupersloth6679
    @ssupersloth6679 Год назад +1

    Great tutorial! It helped a lot and was so much fun!

  • @АндрейКун-ш2в
    @АндрейКун-ш2в 7 месяцев назад +1

    29:56 if you don’t see the list in “add animation”, then just in the animation tree select "anim player" and select "animation player"

    • @blackholesun4942
      @blackholesun4942 14 дней назад

      same problem but your solution doesnt work for me sadly

  • @LucasThomasLuc_Tho
    @LucasThomasLuc_Tho 2 года назад

    Fantastic intro video, I'm a first timer and followed along no problem. Thanks! :D

  • @BellyLachlan
    @BellyLachlan 10 месяцев назад +1

    if you also have a sticky cow try this in the cow script for physics_process
    func _physics_process(delta):
    if(current_state == COW_STATE.WALK):
    velocity = move_direction * move_speed
    else:
    velocity = Vector2.ZERO

    move_and_collide(velocity * delta)

  • @Hurtwolf
    @Hurtwolf 2 года назад +1

    Great video Chris!

  • @seanrendall5495
    @seanrendall5495 Год назад

    Oh, cool, I can't wait to follow this tutorial! It's awesome I can spend my free time learning a skill I've always wanted!
    ... Aaaaand I need a new video card.

  • @IscariotSolia
    @IscariotSolia Год назад

    Thank you for doing godot tutorials, I really hope you do more in the future.

  • @doremifasolitado
    @doremifasolitado Год назад

    this tutorial helped me a tremendous amount with getting me started, thank you!!

  • @DragonByte79
    @DragonByte79 Год назад +1

    46:14 what happened with the layer HighGroundWalls? Then he painted again on TopGround.

  • @gabwyn-art
    @gabwyn-art Месяц назад

    great tutorial bro! leaving this comment to boost your YT algorithm

  • @chip6304
    @chip6304 Год назад +1

    I know it's a bit late but for mouse smoothing, you can change the process call back to physics so that you don't get that motion blur effect on your sprite
    ey idk how it works or what it does buttt, it works so :P

  • @Pecola1FromScratch
    @Pecola1FromScratch 2 года назад +8

    For some reason the Transition connect arrows disappear when I try to connect, they snap in as if they'll connect, then I let go and it disappears. The output log does say "Transition added" as if it was actually added, but there's visually nothing showing. It also isn't actually working when I play it. (I did add the Auto advance on the Start to idle, but it of course doesn't seem to actually be connecting there.
    May be a weird glitch, unless I missed a setup step?
    EDIT: Ah, found someone else in the comments who had the same issue, and just restarted and it fixed. I had given up yesterday, hoping it might be a glitch that fixed itself today after restarting my computer completely, but that hadn't worked. But after restarting *again* today, just restarting Gadot, it fixed itself. 🤷🏻‍♂

    • @manadecide
      @manadecide 2 года назад +1

      I had that same problem. Thanks for the update on your comment.

  • @meruginger934
    @meruginger934 Год назад +1

    37:20 changing the y-values in the inspector doesn't change the direction of the idle animation for me.
    the starting_direction value is completely ignored by the program for me (Godot 4.0.2)
    just kept going... but playing the animation depending on the direction doesn't work at all:
    animation_tree . set("parameters/Walk/blend_position", move_input) has no effect whatsoever

    • @meruginger934
      @meruginger934 Год назад

      Hours later...i got it...
      I wrote $AnimationPlayer instead of $AnimationTree ..............

    • @DisasterGX
      @DisasterGX Год назад

      I'm having the same problem and $AnimationPlayer isn't working for me I am in version 4.0.3

    • @DisasterGX
      @DisasterGX Год назад

      @@meruginger934 Im just gonna change engines this is not worth it this gets updated every other week...

  • @westingtyler1
    @westingtyler1 Год назад +2

    now due to the Unity to Godot exodus we need a good "Every Godot 4 Node Explained video."

  • @jukafah
    @jukafah Год назад

    Some changes in GA since alpha, but still a really helpful tutorial! Keep making them so I can learn more!

  • @marketwoodfarm
    @marketwoodfarm 6 месяцев назад +1

    Thanks for the lesson, I wished you'd redone the cows part, rather then just saying that some footage was missing.

  • @olmrgreen1904
    @olmrgreen1904 2 года назад

    OMG! So glad I found your video! Thanks for the tutorial!

  • @justrosy5
    @justrosy5 10 месяцев назад +1

    As I age, my vision is getting worse, and in order to watch this, I've had to force the 1080p and use the Windows magnifying glass at 275%, but this messes up the stream so the video freezes (while the audio still plays). To get around this I slowed the video speed down to .75. If you have the option of associating the magnifying glass with your mouse while you talk, that would be most helpful! The other option is to use the Editor Settings to change the fonts for the program and for the coding to at least 20 or higher. That might be easier. In any case, If you do what I'm doing, with the magnifying glass on the video you already made, and just do a long screen recording of yourself doing this, then upload that video over this one (does RUclips Studio still allow that?), then that would fix the trouble with reading the text and following the mouse on your screen (for future videos you make).

  • @akizuki2971
    @akizuki2971 3 месяца назад +1

    for some reason on the animation tree i have to put my idle animations in the walking blender and the walking animations in the idle blender otherwise it plays the opposite animations.... you may be thinking ive named them wrong? nope. i made the tree inactive and went to check, theyre all named correctly, its so strange.

  • @leocosta-io
    @leocosta-io Год назад

    Great tutorial, helped me a lot. Thank you!

  • @mayonaise0
    @mayonaise0 Год назад +1

    at 37:36 it seemed to just cut to "this is what i did" and not explain about it much

  • @blackholesun4942
    @blackholesun4942 25 дней назад

    09:00 why not just animate the player
    29:26
    got to 32:00 and realised i somehow lost all my animations from yesterday...... so I went back and tried to use the nimatedSprite2D approach Brackeys used in their video
    40:49 the end of animation process which seemed tedious to me

  • @PatriciaBransford
    @PatriciaBransford Год назад +1

    beginner question.... at 38:04 he has the no equal sign in his code ad my keyboard doesn't have that... can anyone help lol

    • @DMCknight
      @DMCknight Год назад

      the newer version of godot allows != instead

    • @paulwesely4245
      @paulwesely4245 Год назад

      You can replace it with != instead

  • @fabienlamarque5572
    @fabienlamarque5572 Год назад

    in case people, like me, weren't able to collide with hills with their character.in GODOT 4. In the PlayerCat settings, its CollisionObject2D mode was set to disabled.
    @chrisTutorials, thanks for the tutorial, very helpful first mini project in GODOT

  • @ssihanji6802
    @ssihanji6802 5 месяцев назад

    thank you so much for the tutorial. :D
    I'm still beginning on godot. Hopefully, I make a game soon.

  • @blue__soma
    @blue__soma 4 месяца назад

    thank you this was very helpful! im looking forward to more videos

  • @Vidicus
    @Vidicus Год назад

    22:15 once I did these settings my sprite would no longer show up on screen. Even after reverting back to original settings I can’t find him.

  • @Nibilis
    @Nibilis Год назад +8

    Hello to all,
    I know that this tutorial is a bit old but I'm throwing a bottle into the sea anyway.
    My character moves perfectly but doesn't want to start the walking animation when he moves, yet I carefully followed Chris' instructions. I don't get it.
    Beyond these problems I enjoy watching your videos, they are instructive, fun and very pleasant to watch. Thanks to you.

    • @Kwendal
      @Kwendal Год назад

      Thats wierd I didnt have the problem, the map doesnt load tho

    • @lightcrawler909
      @lightcrawler909 Год назад +1

      I had this problem too just click on the arrow that connects the phases in the animation tree and then
      Switch the stuff to auto

    • @duxnihilo
      @duxnihilo Год назад +1

      @@lightcrawler909 I don't see that option.

    • @youcantkillnick
      @youcantkillnick Год назад +1

      @@duxnihilo click on the line between Start and Idle. under Advance, change the Mode dropdown box from "enabled" to "auto". its annoying that the new Godot is different to the build here, because i love this tutorial.

  • @Drachenbauer
    @Drachenbauer Год назад

    I saw cows like yours sometimes play their walk-animation without movement.
    That´s because the direction chooser sometimes outputs a zero-vector as direction, wich means no movement.
    To fix this, i added a while loop there, that checks for the zero vector and so let's only actual directions pass through.
    I also noticed, if a cow collides with a wall, but it´s walking-time is not over, it pusches against the wall until it´s state switches
    So i now made their AI a bit smarter:
    1. I made my them (and also chickens, wich are also in the graphics-set) always walk exact cell-sized steps (gridbased movement)
    2. at choosing a new direction to start a walk-state and after each cell-sized walking-step i let them check for collisions to turn into a new free direction, if they collide.
    So when start a walking-state they always choose random from all free (no obstacles) directions and when reaching an opstacle in their way while not finished the actual wank-state, they also choose a new direction the same way.

  • @AliceT3a
    @AliceT3a Год назад +1

    32:06 This might be a genuine glitch I have but when I hover over Add Animation the box with the options for the animations doesn't appear, just a very thin grey line that might be the hint of a box. Is this a Glitch or could it be something else? Is there another way to add animation into boxes? (edit) nevermind I found the problem!

    • @Not_TVs_Frank
      @Not_TVs_Frank Год назад

      I'm having the same problem - could you please share your solution?

    • @AliceT3a
      @AliceT3a Год назад

      @@Not_TVs_Frank on the right in filter propities where you select the tree root make sure underneath animationnodestatemachine you've also selected animationplayer

  • @sjacobson42
    @sjacobson42 Год назад +1

    I'm about 20 minutes in and when I play it the cat is in the upper left corner of my screen even though it's placed in the center of the level??

  • @maciulex9460
    @maciulex9460 Год назад +1

    Great i love this tutorial
    im in programing but never do any games in game engine
    tutorial that have 30ep every 30min just too long and boring
    best way to learn is to pratice and see what everything do
    that was great tutorial that give me what i wanted

    • @maciulex9460
      @maciulex9460 Год назад

      update it's great i love this engine
      i made for my cows a turrets on back and now they are very dangerous!

  • @nyoriss
    @nyoriss Год назад +1

    I probably did something wrong because when I click on "Add animation" at 32:07 nothing appears
    Do someone know what I have to do ?
    I have no more clues to help except that I use the last version of Godot (v4.2.1-stable_mono_win64)

    • @Not_TVs_Frank
      @Not_TVs_Frank Год назад +2

      I ran into this too, but I just figured it out:
      Select your AnimationTree Node in the scene tree. In the inspector, look for "Anim Player" near the top. Click assign and select your AnimationPlayer node. Now your AnimationTree knows what AnimationPlayer to source for animations, and you can use the Add Animation option when clicking the grid to add animations.

    • @nyoriss
      @nyoriss Год назад +1

      @@Not_TVs_Frank Thank you !
      I moved the animation to the sprite2D and it appeared too, but your solution is clearly better

    • @emilydixon3886
      @emilydixon3886 11 месяцев назад +1

      @@Not_TVs_Frank Thank you so much!!!

  • @jeramiahgentry4660
    @jeramiahgentry4660 Год назад

    At 34:08, he has us change the y value to -0.1 then two seconds later the video seems to skip and when he opens the idle parameter back up again the value is set to 0. Can someone help me with what I’m missing here?

  • @indiegamechris4759
    @indiegamechris4759 2 года назад +1

    I can't cycle through the frames on Sprite2D (24:17). This happened after I finished setting up the animations; it's permanently stuck on frame 2. Is there a locking button somewhere? I restarted Godot and it didn't solve the problem.

  • @joepkippensnuiver2969
    @joepkippensnuiver2969 Год назад +1

    There should be some reddit post or something on these longer tutorials for a problem solving QandA. In general though nice very first introduction.

  • @SFoX-On-Air
    @SFoX-On-Air 2 года назад

    Thank you for that Video. I learned a lot and I am waiting for eagerly for more!

  • @samarthaj7920
    @samarthaj7920 10 месяцев назад +1

    Hey There If you are having trouble with 38:40 animation part the just change the animation_tree.set("parameters/Walk/blend_position",move_input)
    animation_tree.set("parameters/Idle/blend_position",move_input)
    to
    animationTree["parameters/Walk/blend_position"] = moveInput
    animationTree["parameters/Idle/blend_position"] = moveInput
    I was able to get it work like this

  • @Drachenbauer
    @Drachenbauer Год назад +1

    in the first frame of idle right the character is misplaced by one pixel to the left on the spritesheet-graphic, so tile right and left look a bit different on this video.
    I fixed this in my copy of the sprite-shheet-graphic-file

  • @kelvinm560
    @kelvinm560 Год назад +1

    Good basic 2d learning in Godot but could you please increase the font size in the editor - it's kinda small.

  • @playhelper1
    @playhelper1 2 года назад +3

    Seems like the animations for walk and idle are broken in Beta 6. Switched to beta 5 and it works.

  • @TheStellarJay
    @TheStellarJay 7 месяцев назад +6

    I think you skip over WAY too much shit for a beginner video. You copy and pasted code from random places so I don't understand it and have to rewind and pause a bunch to copy it. Probably just re-record when you lose footage because now I have to go back through the video to find shit. Way too fast in some areas I have to rewind constantly. I appreciate the video, hope to see some of that improved

    • @thesecretpanda2224
      @thesecretpanda2224 6 месяцев назад

      I set comments to newest to see if other people were having trouble with this tutorial, and you're not quite who I expected to find.

  • @MikhaelHld
    @MikhaelHld 2 года назад

    Really appreciate this, super duper helpful, i love you 🥺

  • @m.a.6354
    @m.a.6354 Год назад

    trying to find out how you go from 13:51 to 13:52, cant get that info in correctly

  • @Clubgeist
    @Clubgeist Год назад +2

    The whole AnimationTree part is not working anymore. There is an "End" box now, and connecting "Idle" to "Walk" and reverse will start an infinity loop (Idle and Walk box blinking red border) , where no animation is being played at all. The auto advance setting for transition is not there anymore. It shows Advance -> mode -> auto as default. Don't know if this is the same ?! But how can a newbie know? Disabling the advance mode for walk animation will let me play the idle animation again in the animationTree window, but starting the game wont show any animation at all.
    Tldr; 3 hours of waste, throwing my project to the bin. I don't know why they would change the UI all the time so every tutorial on the internet is useless...

    • @Clubgeist
      @Clubgeist Год назад

      Got it fixed with the help of Veldtwalker's comment below

  • @FriskDreemurr66669
    @FriskDreemurr66669 8 месяцев назад

    im up to 40:10 and my character is completely okay until i move, it's only facing left for some reason.

  • @TheRhalf
    @TheRhalf Год назад

    in tilemap 47:25 I think it's best to use a grid to avoid weird collisions and make the process faster

  • @thibaulttostain7047
    @thibaulttostain7047 2 года назад +3

    There is no "physics layer 48:00 " in beta 5, does anyone know where it is ?

    • @DrPhilboBaggins
      @DrPhilboBaggins 2 года назад +1

      It's there in mine, the "Physics layers" is a drop down, directly under "tile size" in the inspector.

    • @ivanzdanov4479
      @ivanzdanov4479 2 года назад

      Hi Thibault, were you able to find this one? I'm on beta17 and don't see it either. Thanks.

    • @ivanzdanov4479
      @ivanzdanov4479 2 года назад +1

      @@DrPhilboBaggins Hi Phil, I'm on beta17 and don't see the Tile Size or the Physics Layers. Which version were you using? Thanks!

    • @ivanzdanov4479
      @ivanzdanov4479 2 года назад +2

      problem solved, needed to click on "tileset" first.

    • @ivanzdanov4479
      @ivanzdanov4479 2 года назад +1

      problem solved, needed to click on "tileset" first.

  • @aryantzh2028
    @aryantzh2028 Год назад +2

    u should make a code text size a little bit bigger, its hard to see when my pc resolution is just 1366x768

  • @walbobo
    @walbobo Год назад

    Around 40:00 I am totally clueless on how to get this working in C#. I am a Unity refugee and was able to get the movement working, but no idea how to switch animation states

  • @JayTailor45
    @JayTailor45 Год назад

    Thanks so much. I learned a lot about Godot today.