Very high quality tutorial, thank you! I see you're pumping out content like crazy. I'll keep an eye out for that! 😊
wow this is an awesome tutorial, there's not much tutorials out there teaching us how to create a full options menu even with accesibility! Can't wait for your next video!
I've been binging learning video's for Godot over the past month and you're the best. Clearly saying every setting you change as you change them make it so easy to follow along, and you have great experience!!
This was a great little tutorial, thanks! I see you've also got a video on setting up resolution/graphics settings so I'll check that out next.
A very promising (and oh so useful) series ! Looking forward to watching next steps. One more subscriber...
Fantastic video, detailed step by step explanations make it easy to follow and implement. Appreciate the time it takes to create and edit.
This may help others with a slightly different menu options set up. I had an issue where the music plays on my main menu, but when i select the Options Menu the music stopped (everything else works fine). I fixed it by adding & replicating the Music(Audio)StreamPlayer to my options menu.
Thank you so much for this informative video.
I just did it like this in the options menu using the built in signals in the node tab to the right of the inspector as I didn't want to reinvent the wheel.:
class_name OptionsMenu
extends Control
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
func _on_exit_pressed():
get_tree().change_scene_to_file("res://scences/title_screen.tscn")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
Great video! thanks so much
i don't undestand how this guy can be so underrated his tutorial are fire
godlike tutorials, thanks a bunch
thanks!
you help so much
Another shortcut is if you double click a word it selects that word, if you triple click it highlights the entire line.
I learnt stuff so I connected, whoops subbed
good tut tnx
thx bro
what is wrong with just connecting the signals through the node tab by the inspector? Feels like it's way easier than manually typing out the connection and then making the function yourself.
i made a texture for my main menu and was having trouble lining up the buttons in the margin container with the buttons on the texture, is there any way to have finer control of the button placement in the container or is making each button separate the only way?
Awesome tutorial , just a tiny problem, my main menu already has a background music and a world environment scene attached to it
If I’ll make it as two separate scenes when you click the option button, it will reset the music and the background animations .. isn’t there a way to just create the options menu as a child node of the options button instead of creating and entire separate scene ?
Дауж на С++ это меню создается за 5 минут 😁 Может быть как то может проект перед игрой запустить сторонний DLL файл ?
A little late to this, but what is the benefit/purpose of creating your own defined functions to handle the button presses when you could use the "built in" underscored signals coming from the button nodes to create them for you? It appears to me to create less overall code with the same result. I'm very new to GameDev coding so I'd appreciate the help!
Thats a really good question!
The best part about game dev is there are 100s of ways to accomplish the same thing. Personally I prefer to create my own functionality because it gives me much more controll and readability over what I need to be handled. It also allows me to make modifications on the fly if I need to!
having an issue with the setproccess(true) element. whenever i write that line in, and then run my scene, if i click the button to go to options, it freezes the game, and prints the following
Stack Trace:
Invalid Call. Nonexistent function 'setprocess' in base 'Control (OptionsMenu)'
However, if i just comment out the setprocess(true) line in my main menu script, everything works exactly as i'd want it to. even recreated this whole thing for a credits scroll thing, and i had the same issue, with the same resolution.
will i run into problems if i don't find some way to have setprocess(true) in my script? have i done something wrong? my options menu script is identical to the one presented in the video.
in version 4.1.2 the command options_menu.exit_options_menu.connect(on_exit_options_menu) in the editor it's fine but when you run it crashes the program I'm still working on a way around it.
It caused by the godot badly importing the scene, if you import it from scene file in to the main menu* it will work
when I add the Vbox container, it is not as big as yours, it is rather small and on the top left of the window
On the top bar in the 2D view you'll see quite a few buttons. If you left click on any green node or ui node you'll see on the furthest side (right side) you'll see a green circle with a little cross on it. Click that and you'll be able to set the anchor options, setting it ti full rect (full white square) should fix your problem.
If it does not try checking the anchors of the parent and make sure they are set up aswell.
I hope this helps!
I came here hoping to learn about the OptionButton node😂, my problem is setting the option button text not it's options but the word on the button itself, how did the options button become so underrated when it so powerful 😢
Hey can you bind keys so it can move the tabs ? like in typical console games you press L1 or R1 to switch tabs?
thanks
One of the next videos in the series is about making the menus more user friendly including binding buttons to tab scrolling, like typical console games :)
@@CoffeeCrowDev Thank you for the response ;). Probably should’ve told that to the original commenter tho
for some reason wwhenever i load the game it overlays the options on the menu, how do i fix it?
In your editor. Is the options menu visibility toggled on or off? If its visible, try toggling it off and launching the game, if that doesn't work, go to the main menu script, set the options menu visibility to false via code.
Let me know how that goes!
@@CoffeeCrowDev i turned off the visibility of the options menu on the main menu, it fixed the problem. thank you
@@CoffeeCrowDev How do I set the visibility in the code to false or whatever you mean?
@@RaceGHG Objectname.visible = true or false as you wish
example :
options_menu.visible = false
I followed up to the point where the options button should go to the options menu and the exit button should exit but I keep gettin a game crash and error of "Invalid call. Nonexistent function 'connect' in base 'bool'.
The code it is talking about is:
"func _ready():
exit_button.button_pressed.connect(_on_exit_button_pressed) * void:
exit_options_menu.emit()
set_process(false)
"
Hey!
So within the ready function, You are trying to connect to the "button_pressed" variable, You want to change that too ` exit_button.button_down.connect(_on_exit_button_pressed) `
I have done this so many times myself!
@CoffeeCrowDev would it make a difference if I used button pressed everywhere else? I didn't use button down anywhere else. What's the difference and why is is messing with the code?
@CoffeeCrowDev so I fixed the issue. For some reason it didn't like those to be in the ready function. I made new functions for them and connected them. I still have everything set up pretty much verbatim and I can get into my options menu but the exit button doesn't work on getting me back to the main menu. I had it print when I pressed it and that worked but the rest of the function doesn't. Idk what's happening and I don't know what to do.
Sorry for the late response. The difference between "button_pressed" and "button_down" is the first is a boolean, it has no connect functionality. The second is a signal. It has a connect functionality.
This is awesome! I'm getting one weird error though: if I run the Options Menu scene, everything works fine, but if I run the Main Menu scene, it flags the exit button inside the Options Menu ready function as an error.
Invalid get index 'button_down' (on base: 'null instance')
Every other button_down works, so what's different about the options menu exit button?
Script:
@onready var exit = $MarginContainer/VBoxContainer/Exit as Button
signal exit_options_menu
func _ready():
exit.button_down.connect(_on_exit_pressed)
set_process(false)
func _on_exit_pressed() -> void:
exit_options_menu.emit()
set_process(false)
It caused by the godot badly importing the scene, if you import it from scene file in to the main menu it will work
@@RaceGHG take the scene file from the file manager on the bottom left and drag it in to the main menu scene instead of using of using the add child note
Isn't it easier to just do: get_tree().change_scene("res://path/to/scene.tscn") ?? What is better?
I'm going on the assumption you are asking about why the options menu is stored withing the main menu and why we are just hiding it rather then just using the change scene functionality.
If so great question!
I find that it's a little more performative (which is massively unnecessary to be honest) and it's a little easier to handle then having to switch things back and forth, it also removes the chance that the options menu path gets changed and things freak out.
I will be honest, this is probably the most helpful tutorial series I have seen.