10 Godot Engine Mistakes You Might Make (Godot 4 / Godot 3)

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

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

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

    Install Raid for Free ✅ IOS/ANDROID/PC: clcr.me/mbqaDe and get a special starter pack 💥
    Available only for the next 30 days

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

      i only use await for Loading gamefiles and it works pretty fine
      i have more than 90 3D scenes instances then loads into the game
      but when i tried to load them at the same time it crashed and almost really burned my GPU
      to prevent this i added await 0.5s timer for each load and now it doesnt crash
      like come on loading almost a 32km by 30km world in 3d with almost Godot 4 looking graphics on godot 3 is already hard by its own

  • @Gdquest
    @Gdquest 2 года назад +50

    These tips videos are really nice! Would you like to do a RUclips collab with us on some Godot 4 tut or tips or something?
    For tweens, I'd expect remove_all() to work moving forward because it deletes the registered tween animations, so it shouldn't be able to continue the animation once the data got deleted. But that's definitely been a little confusing, and I've made the mistake of calling stop_all() over remove_all().
    Thanks for the video!

    • @PlayWithFurcifer
      @PlayWithFurcifer  2 года назад +12

      Sounds great! :)
      Let's talk on discord?

    • @Gdquest
      @Gdquest 2 года назад +11

      @@PlayWithFurcifer Sure! I'll email you my Discord ID through your RUclips email.

    • @robertonome2448
      @robertonome2448 2 года назад +17

      top 10 most awaited crossovers

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

      My favorite godot RUclipsrs together, sign me up

  • @Theraot
    @Theraot Год назад +13

    If you are still collecting GODOT tips, I have one more for you: You know there are numeric values that have an slider in the inspector and other don't? Well, even they don't have an slider you can click and drag the number left and right to smoothly change it. But that is not all: hold SHIFT to make change slower, which is useful when you need more precision, and hold CTRL to snap the value to an integer. I did know I can drag the numbers, but not that SHIFT and CTRL had an effect while doing it, until very recently.

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

      Just started using Godot and this little tip is something most blender users will intuit. That’s so far, one of my favourite things about Godot. I hated navigation and that in Unity. But Godot is identical in terms of viewport controls and little things like this which I love to see

    • @ItsMeAndru
      @ItsMeAndru 3 месяца назад

      This is a very good tip. Thank you!

  • @GeneralMattimo
    @GeneralMattimo 2 года назад +19

    Forgetting that arrays and dictionaries are passed as references:
    A = [1,2,3]
    B = A
    B[0] = "hello"
    Print(A)
    Output
    ["hello",2,3]
    The cause of so so many of my bugs by forgetting
    B = A.duplicate()

    • @PlayWithFurcifer
      @PlayWithFurcifer  2 года назад +4

      Now that you mention it, that is really weird.
      I got used to that by now

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

      @@PlayWithFurcifer I didn't think I had but then tried to learn a little GDnative C++ and bugged up the other way around because C++ doesn't pass them as references unless u tell it to.

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

      Ah didn't realize that C++ doesn't pass as reference, huh

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

      @@sheepcommander_ moving from gdscript to c++ is an experience.

  • @Portponky
    @Portponky 2 года назад +7

    You're a real youtuber now that you're sponsored by Raid: Shadow Legends.

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

    For some reason, if make an one-shot animation with 100% explosiveness, it has a massive delay before it can emit again. Meaning, if you want to make these kinds of particle effects often from a single source, like a cloud of particles when you jump, you should spawn a new particle object each time instead. (and delete it afterwards of course)

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

      Try calling the function restart() on the particle system!

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

    I recently had fun debugging material shaders (Godot v3.5) that should be unique since they would have different input parameters. Looking at the tscn file code shows the ids for them in the scene tree to see that they are not made unique. In my case I was setting the next_pass property of a material to the shader. Another debugging trick is to print the name of the material or shader instance, this prints its reference id to check if the same ones are being used. To make them unique I ended up duplicating a master version of my material in code.

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

    8:47 I thought it does NOT support mp3? As it's also not listed on the image you show

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

    "Not making stuff unique". This has given me such a headache that I now frequently make any node's script a tool script and include a setter for resource exports that uses duplicate() to set the resource variable to a new unique instance of the resource automatically. This has been saving me the headache of making them unique every time, AND I can filter from the setter function and include whatever other conditions I need/want.

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

    `is_instance_valid()` is something I wish I knew about when I was first starting. Solid advice.

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

    So that is what physical keys are for!

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

      I was wondering for a while before we found out :D

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

    Love you gorgeous people! These types of videos are worth their weight in uranium. When you just can't fix that error, this video is like a bar of chocolate, delivered by a cute bunny, on a sunny day, whilst wearing new shoes, smelling freshly baked doughnuts, with all your loved ones cheering you, and you find out that Furcifer's Fungeon gets a release date :)

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

    Holy S. I'm implementing this is_instance_valid() throughout my code immediately. I had some edge case problems with checking for null and didn't know why that was. THANKS!

  • @DG-hw5zy
    @DG-hw5zy Год назад

    I loved the .ogg tip. Thanks 🙏

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

    Good tips. Yield is a monster in the closet. Glad to see you guys working on something new.

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

    one more godot channel i enjoy, subscribing and excited for future content

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

    I had slow load times with mp3 and even crashes (my guess is that something odd with the encoder caused an edge case in Godot), in particular in web exports. Ogg is much better. Although my experience is that Ogg is slightly larger (you say it is smaller?), it loads faster (it seems that with mp3 Godot takes a little longer to fill audio buffers).

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

      OGG is a bit larger with same bitrate, but with a slightly lower bitrate it is both smaller and better quality (as far is my research goes, i dont have the ears to confirm that)

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

      I started my own game with MP3 files and I quickly changed them into OGG files. By lowering the quality setting a bit (I use audacity to convert them), they're really smaller in my project and I could not notice any audio quality loss even with a headset.

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

    'Await' is so backward coming from gsc where every called function must return before proceeding. It's nice using actual results & not function states. If one needs to run a function simultaneously for whatever reason, just gotta specify it with a single keyword without the need to inherently proof any other relevant script. It's irritating at times calling functions in Godot with seemingly no absolute guarantee of a timely return & having to proof stuff when I just want to expect a result first.

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

    just beca a subscriber keep up the good work Sir.

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

    be careful with yields with objects outside of the main tree

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

    Well guys, I owe you a tank of *well.. something to drink that the algorithm dont like me to post*...
    That "is instance valid" literally took me out of a month long suffering spiral...
    Thanx a ton!!!!!!
    (And awesome video as always!!)

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

    huh. OGG smaller than MP3? that's news to me.
    I went from OGG to MP3 because of size.
    quality is generally fine.

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

      ogg is better quality in same bitrate compare to mp3, so you can use lower bitrate (size) in same quality of mp3.

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

    I'm curious, how much did Raid Shadow Legends pay you?

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

      It is based on downloads. So probably $0 so far, some if they get downloads. ruclips.net/video/wSm8pjCKoJI/видео.html

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

    Tutorials for godot 4 please

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

    So. If my code in Godot 3.xx said yield, it means it won't work in Godot 4? That's dissapointing.

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

      Yup it was renamed. You can find more info about GDScript 2.0 here: github.com/godotengine/godot/pull/39093
      There are quite a few converters in the works. The Godot 4 Beta comes with a converter integrated. Haven't tested it yet though.

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

      @@PlayWithFurcifer Thank you. I don't like this change. The word yield is used hundreds of times in my projects. I hate this change. Now I'll have to change this word hundreds of times. Just nonsense. By the way, your video is great and very informative.

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

      @@saulnores3477 Godot 4 will convert those for you the first time you open a project made with Godot 3.x - There will still be things to change, but yield and a lot of the API renames won't be among those. Except when you yield on something Godot can't figure out.
      ---
      I have notes on what you will have to look for:
      - Now there are two typed version of min, max, clamp, sign and abs. One works with int and the other with float. You might need to figure out which you need on a case by case basis.
      - Some APIs now use StringName when they used String before. Godot will convert between them with no problem, but some things you may have to change some declaration from String to StringName to match what Godot uses.
      - There is no subarray, now it is slice, and be careful with the upper bound.
      - Tweens are no longer nodes. Which also means you should not add_child them, but you still need to keep a reference… It is better to migrate to the new API.
      - You need to copy the bodies of getters and setters manually.
      - Warning suppression are not migrated. Also Godot 4 defaults are more strict than Godot 3.x defaults. Plus there is an open issue on the suppression of the unused_parameter warning.
      - As I said, if Godot can't figure out what you are yielding on, you will have to write the await yourself.
      - Remember to Configure Blender and FBX2gltf
      - Some EditorPlugin API changes still need to be done manually, in particular renamed virtual functions.
      - Pay attention to the changes to the button pressed state and signal names.
      - You need to update exported variables that have an enumeration manually
      - It is now _get_configuration_warnings and returns a PackedStringArray, Godot won't upgrade this for you.
      - You need to specify class icons with @icon

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

      @@saulnores3477 To clarify, on yield, Godot expect the signal name to be a string literal, or a variable identifier. If you have there something more complex (e.g. a ternary expression, or you do some string concatenation) then Godot won't be able to convert it to the new syntax.

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

      @@Theraot Hi Alfonso. Thank you for your detailed explanation. You have been very polite. I learned many things with your answer. Thank you very much.

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

    1:19 Is that an @? What does @onready mean? 👀

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

      That is an annotation. Which are part of GDScript 2.0 new syntax, which Godot 4 uses. @onready is what onready was for Godot 3.x.

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

      @@Theraot 👍

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

    Please bring your videos to Odysee as well!

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

      I have no experience with that platform, what is it for?

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

      @@PlayWithFurcifer it's a great video platform and you can sync automatically to Odysee from RUclips. The amount of ads is getting annoying on RUclips unfortunately

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

    Raid shadow legends 💀

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

    Wav is better for sfx as it's less resource hungry and easier to stream. Great video as usual, but you've pretty much ruined it with a two minute advert. I've literally never seen an ad this long before, ever. I've think they have taken advantage of you . All it will do is result it lost viewers and every single viewer will skip the entire section so for this advertiser I've no idea what they were thinking, they have a zero result.

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

      I really don't think the (90s) advert ruined the video, people can skip it and it performs well.
      You simply have no insight into the deal we made, so I do not understand how you can judge if it was a good one...

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

      @@PlayWithFurcifer I'm glad you have sponsors, really am, and anything is better than being forced two unstoppable 20 second ads at the star 😉
      Just commenting on the extent of it, feel free to ignore me. But yes, I skipped it all, that was my point.

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

      I'm not a fan of Ads but I watched this one since it was fun.

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

    First

  • @guywithknife
    @guywithknife 7 месяцев назад

    Stopped watching at the advertisement for that exploitative garbage raid shadow legends. My ethics don’t allow me to support channels that chill trash that exploits its users

    • @PlayWithFurcifer
      @PlayWithFurcifer  7 месяцев назад

      Oh no, how will I live without you specifically watching this tutorial? :(
      Understand that you not watching a tutorial is your loss, not mine lol

  • @krzysztofswierzy4226
    @krzysztofswierzy4226 2 года назад +32

    There is one other error I see at least once per every page on Godots Q & A Forums : forgetting about mouse filter set to stop of overlaying control nodes :)

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

      That one has gotten me countless times in the past, after about the 20th time I think I finally learned to check for it but it can still be tricky to track down in dynamic UIs.

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

      @@beidero Just dealing with that today actually. Working on a card game framework and mouse events for overlaying cards is harder than expected. I played around with visual click tracking (everything is pure Area2D) or control based click tracking (treenode traversal with dead-ends) . The latter of the two took a bit to figure out.

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

      That is a very common one, yes. Although it is usually something easy to spot (like a background element), for those cases where it is really hard to find, here is an extra tip: With the game running, open the debugger panel on the bottom, and then go to the Misc tab, it will show you the last control you clicked. You can then start clicking around and see there what is intercepting the clicks. You can double check with the Remote tab of the scene panel, also while the game is running.

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

      @@Theraot A lot of people, me included, expand control nodes to fullscreen, while making visual changes only at the small part of it. That is why this problem is so hard to spot :)

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

      @@Theraot WHAT!?!?! I never knew about that. That one is huge! Wish we had a tool/plugin/panel that would dump out all mouse input events.

  • @Smaxx
    @Smaxx 2 года назад +4

    Wait, does this make taking a Raid Shadow Legends sponsorship a mistake, too? Are we even the target audience for that game?😉

  • @Nero-hi3zf
    @Nero-hi3zf Год назад +8

    Here are some mistakes I used to make:
    1. Signals + Multi-Threading = no no
    2. Forgetting to free a Thread with 'wait_to_finish()'
    3. Setting materials on a mesh resource instead on the MeshInstance.
    4. Setting velocities (or even worse positions) directly on rigid physics bodies.
    5. Using bodies instead of areas for bullet hit detection.
    6. Removing a node from scene tree without calling queue_free()
    7. Statically typing arrays as function parameters can cause funny lines like 'Cannot convert argument from Array to Array'.
    8. Not understanding that 'await' is in NO way or form multi-threaded but a coroutine instead!
    9. Setting values of locals within a lambda which have the same name as a variable in an outside (global) scope has no impact on the values of the variables within the outside (global) scope! (Note: 'global' means something different here than member)
    10. Placing a GIProbe (it was Godot 3) not into the geometry 3d-node-based part of the scene tree, which causes the probe to have no effect at all.

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

      Tried this but now the ColorRect will stretch the pixels if you don't have a 1:1 ratio sized window.

  • @bengtstrand4476
    @bengtstrand4476 2 года назад +7

    "Make unique" has a cousin in "Local To Scene", a property (found under Resource in the inspector) that makes the resource unique when you instance scenes dynamically.

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

    Thanks for explaining the execution flow with await. It's indeed quite mind-melting.

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

    You have easily become my favorite godot channel after only watching 3 videos of you. Looking forward to go through the shader tutorials. Up until now, I never got into it ;)

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

      Thank you very much :)
      And have fun with the shaders! They are a bit weird at first, but not that hard

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

    That was great! Also that's the only Raid Shadow Legends ad I've ever seen that tells the story of that game. And you told it in a funny way! Way to go.

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

    Spent 3 hours trying to fix a problem godot engine made up, yes, made up, since the issue doesn't exist. The only solution for it would be to clean missing files, does godot have this cleaning option?
    The issue is missing index h frames times v frames, on animation player

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

    hello, i have a problem my game keeps crashing with "all memory pool allocations are in use" error. How can I fix this?

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

    glow on android has low fps :(

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

    A reeeaally useful video for cases every Godot developer has already had !

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

    You must know how and when to use yield(). Although, you can't tell people not to use it just because you haven't found a good use for it.

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

    The 3d framebuffer allocation will slow down a 2d game on mobile significantly, but on newer devices it is still unnoticeable, also, can I ask what software you fella's use for video editing,? Thanks.☺

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

    Everything works, especially free, use until it is too late!Cool! Downloaded))

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

    Nice!
    I am surprised about the yield/await call used in such a way.

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

    I wonder if there's an easier way to make a "player limited vision" without having to use light2d and lightoccluder2d? Like, the player not being able to see through walls and instead just see darkness on the other side.

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

      Pretty much sounds like the main application for light 2d. Maybe you can build the occluders programmatically from collision shapes? Someone might have solved this already

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

      @@PlayWithFurcifer I've checked and tried with light2D on the player and the occluder on the wall tile in my top view 2d game, but the "darkness" gets rendered on top of the tile so I can't see the wall's sprite, meaning I can't make 1 tile walls for example, because they'll just be completely black and it looks bad :(