Пікірлер
@sokolum
@sokolum 14 сағат бұрын
Ow WOW GODIT is awesome and the tutorial is perfect.
@Mrsomfingblock
@Mrsomfingblock 2 күн бұрын
thanks so much, this helped me so much : )
@LtsVapor
@LtsVapor 2 күн бұрын
this is my first game in godot and its been really helpful teaching me all the basics im sure ill forget the complicated stuff but I think this is gonna give me a good starting point so thank you
@dgc7419
@dgc7419 2 күн бұрын
thanks again! top teacher!
@dgc7419
@dgc7419 2 күн бұрын
thank you! u rock
@EvilCrash3000
@EvilCrash3000 3 күн бұрын
41:45 when my enemy touches a wall, the game crashes and it shows me this error in godot: "Cannot call method 'as_relative' on a null value."
@Gongikong
@Gongikong 4 күн бұрын
u are making the generation smart
@thesquirrelchase-exploreph5635
@thesquirrelchase-exploreph5635 4 күн бұрын
Phenomenal series!
@langsor
@langsor 5 күн бұрын
Thank you. I'm really enjoying this tutorial series. I just finished a 2D tutorial by "Brackeys" (recommended). In his he said that the `_process` function ran as fast as the computer would allow and is for onscreen animation. Here you can use `delta` to create steady movements. Then `_physics_process` runs at 60 fps consistently. As a complete noob to video game development I can't say if that is correct, but thought it worth a mention.
@Charon38
@Charon38 5 күн бұрын
Thanks! I noticed that "the `_process` function ran as fast as the computer would allow and is for onscreen animation" part. But I didn't know the solution. It worked for me thank you :).
@langsor
@langsor 4 күн бұрын
@@Charon38 Awesome! Glad I could be of help. Godot seems like it has a great community and it feels good to start being a part of that.
@NextToMe1991Dev
@NextToMe1991Dev 5 күн бұрын
thx sifuu!
@PeterSkye
@PeterSkye 6 күн бұрын
Great video, but please, could you share blend file with the blocks because me as a blender 3D artist, I already know this stuff and would like to focus on next Godot lessons instead.
@sykojme
@sykojme 6 күн бұрын
Thanks
@BornCG
@BornCG 6 күн бұрын
Thank you! 🤩
@Necrincito
@Necrincito 7 күн бұрын
Hello, I want that when interacting with a monster, when pressing the button (_si_button) of the DialogScreen script, being in the world, the function called _on_si_presionado() is activated, in short it is an interaction with a dialogue in a monster in the world and I want to activate the function of another scene from a button, how can I do it?
@Necrincito
@Necrincito 7 күн бұрын
script (ui)(script in node child,) scene parent node name (name batallas res://Escenas/batallas/batallas.tscn) extends Control var picapica_activado : bool = false var picapica_instanciada : Node = null @onready var picapica = preload("res://Escenas/ParaEquipo/pika_icon.tscn") # Preload de la escena con la animación @onready var posiciones = [ Vector2(350, 45), Vector2(350, 132), Vector2(350, 220), Vector2(350, 308), Vector2(350, 397), Vector2(350, 483) ] var animaciones_instanciadas = [] func _ready(): instanciar_animacion() func _on_si_presionado() -> void: print("Activando animación") instanciar_animacion(true) # Activar la animación func instanciar_animacion(activar: bool = false): picapica_activado = true print("verdad") if activar and picapica_activado: # Verificamos si picapica está activado for posicion in posiciones: var libre = true for anim in animaciones_instanciadas: if anim.position == posicion: libre = false break if libre: picapica_instanciada = picapica.instantiate() # Instanciamos la animación picapica_instanciada.position = posicion # Colocamos la animación en la posición libre cambiar.add_child(picapica_instanciada) # Añadimos la animación al nodo Cambiar picapica_instanciada.scale = Vector2(1.5, 1.5) animaciones_instanciadas.append(picapica_instanciada) # Agregamos la animación a la lista break # Salimos del ciclo ya que hemos colocado la animación actualizar_visibilidad() func actualizar_visibilidad(): for i in range(posiciones.size()): var posicion = posiciones[i] if hay_animacion_en_posicion(posicion): mostrar_nodos_vida(i + 1) # Mostrar los nodos correspondientes mostrar_boton_posicion(i + 1) # Mostrar el botón correspondiente else: ocultar_nodos_vida(i + 1) # Ocultar los nodos si no hay animación ocultar_boton_posicion(i + 1) # Ocultar el botón correspondiente si no hay animación func hay_animacion_en_posicion(posicion: Vector2) -> bool: for anim in animaciones_instanciadas: if anim.position == posicion: return true return false
@Necrincito
@Necrincito 7 күн бұрын
script DialogScreen(is dialog) extends Control class_name DialogScreen var _step: float = 0.05 var _id: int = 0 var data: Dictionary = {} @export_category("Objects") @export var _name: Label = null @export var _dialog: RichTextLabel = null @export var _faceset: TextureRect = null @export var jugador_0: Node = null # Referencia al nodo del jugador @export var pikachu_1: Node = null # Referencia al nodo de pikachu_1 @export var _si_button: Button = null # Referencia al botón "Sí" @export var _no_button: Button = null # Referencia al botón "No" var _is_interacting: bool = false var show_buttons: bool = false # Controla la visibilidad de los botones func _ready() -> void: _initialize_dialog() _is_interacting = false # Inicialmente no está interactuando _si_button.visible = false # Ocultar los botones inicialmente _no_button.visible = false # Ocultar los botones inicialmente # Conectar el botón "Sí" para que active la animación de picapica _si_button.connect("pressed", Callable(self, "_on_si_pressed")) # Conectar el botón "No" para que cierre el diálogo _no_button.connect("pressed", Callable(self, "_on_no_pressed")) func _process(_delta: float) -> void: # Verificar si el jugador está cerca de pikachu_1 if jugador_0.global_position.distance_to(pikachu_1.global_position) < 25.0: # Ajusta la distancia según lo necesario if Input.is_action_just_pressed("ui_accept") and not _is_interacting: _is_interacting = true _initialize_dialog() else: _is_interacting = false if Input.is_action_pressed("ui_end") and _dialog.visible_ratio < 1: _step = 0.01 return _step = 0.05 if Input.is_action_just_pressed("ui_end"): _id += 1 if _id == data.size(): queue_free() return _initialize_dialog() func _initialize_dialog() -> void: if _id < data.size(): _name.text = data[_id]["title"] _dialog.text = data[_id]["dialog"] _faceset.texture = load(data[_id]["faceset"]) # Control de visibilidad de los botones if data[_id]["dialog"] == "¿Quieres añadir a este pokemon?": $No.grab_focus() _si_button.visible = true _no_button.visible = true show_buttons = true else: _si_button.visible = false _no_button.visible = false show_buttons = false _dialog.visible_characters = 0 while _dialog.visible_ratio < 1: await get_tree().create_timer(_step).timeout _dialog.visible_characters += 1 pass func _on_si_pressed() -> void: _on_no_pressed() # Esto cierra el diálogo si no se activa picapica # Función que se llama cuando el botón "No" es presionado (cierra el diálogo) func _on_no_pressed() -> void: # Aquí cerramos el diálogo, eliminamos los botones y ocultamos el texto _si_button.visible = false _no_button.visible = false _dialog.text = "" # Opcional: limpia el texto del diálogo _name.text = "" # Opcional: limpia el título _faceset.texture = null # Opcional: borra la cara # Oculta el diálogo y termina la interacción _is_interacting = false queue_free() # Cierra la escena o el diálogo, según lo que prefieras
@Necrincito
@Necrincito 7 күн бұрын
script mundo_salvaje_1 (is world:script in world intermediary dialog HUD in world: is canvasLayer ) extends Node2D class_name mundo_salvaje_1 const _DIALOG_SCREEN: PackedScene = preload("res://Escenas/Dialogos/dialog_screen.tscn") var _dialog_data: Dictionary = { 0: { "faceset": "res://Recursos/Imagenes/Sprites/Interface/Objetos/pokeIcon_1.png", "dialog": "Este pokemon es amigable", "title": "Poke Wild:" }, 1: { "faceset": "res://Recursos/Imagenes/Sprites/Interface/Objetos/pokeIcon_1.png", "dialog": "¿Quieres añadir a este pokemon?", "title": "Poke Wild:" } } @export_category("Objects") @export var _hud: CanvasLayer = null @export var jugador_0: Node = null # Referencia al jugador @export var pikachu_1: Node = null # Referencia a pikachu_1 var _is_interacting: bool = false # Para controlar si la interacción ya está activa func _process(_delta: float) -> void: # Verificar si el jugador está cerca de pikachu_1 if jugador_0.global_position.distance_to(pikachu_1.global_position) < 25.0: # Ajusta la distancia según sea necesario # Si el jugador está cerca y presiona "ui_accept", se inicia la interacción if Input.is_action_just_pressed("ui_accept") and not _is_interacting: _is_interacting = true _start_dialog() else: _is_interacting = false # Si el jugador se aleja, resetear la interacción func _start_dialog() -> void: var _new_dialog: DialogScreen = _DIALOG_SCREEN.instantiate() _new_dialog.data = _dialog_data # Asignar los datos del diálogo _hud.add_child(_new_dialog) # Agregar la pantalla de diálogo al HUD
@adrianh.5939
@adrianh.5939 7 күн бұрын
Couple extra things, the limited dissolve on the text > mesh $ sign leaves a looooot of cleanup as a warning, also the boolean union leaves the internal faces and edges that you still need to delete. Great tutorial!
@yuktirajshirkande-b7v
@yuktirajshirkande-b7v 7 күн бұрын
HI 😊
@Atri4
@Atri4 8 күн бұрын
ty legend
@TheTyrori
@TheTyrori 8 күн бұрын
shift+d to duplicate just straight up does not work this way in blender 4. the only way i could actually get it to duplicate the ramp and have it show up in the scene selection was to manually copy and paste the ramp in there.
@KungFu-x1j
@KungFu-x1j 9 күн бұрын
Probably best Godot tutorial series on the internet
@YuZhang-k5j
@YuZhang-k5j 9 күн бұрын
谢谢!
@BornCG
@BornCG 5 күн бұрын
😍 thank you!!
@theravenpirate4744
@theravenpirate4744 10 күн бұрын
still using this in 2025
@xSpexz
@xSpexz 10 күн бұрын
My character keeps falling trough the ramp top, what do i do?
@mauvelilac08
@mauvelilac08 10 күн бұрын
This is good if you'd only make a game about memory match but if its alongside other scenes of games inside one game it isn't because when i play other scenes other than the memory game it results into an error. I can't even play the menu scene.
@mauvelilac08
@mauvelilac08 7 күн бұрын
Oh wait I fixed it. Guess I just need to integrate the part two in my modified script
@TheTyrori
@TheTyrori 10 күн бұрын
Works like a charm! Glad to have these tutorials when others I've started just pre-suppose that I know all of these things.... That said, I couldn't get the anti-aliasing to work very well. The SCR actually looked worse even with SCR AA and regular AA at x8! I don't know what's up with that.
@GuyFunniGD
@GuyFunniGD 11 күн бұрын
are you thinking of ever adding bosses / worlds to the game?
@BornCG
@BornCG 11 күн бұрын
That's a good idea! ...But I'm sticking to level basics and how to publish, which is still a huge undertaking. This series/course I recorded in the summer of 2023, and I've been generally finished editing them as I go, and have been publishing them every 3-4 weeks, so I fear dragging out the series too long. 🫠🙃
@rremnar
@rremnar 12 күн бұрын
@32:34, there is no bug in Godot with your enemy not turning. The bug in is in your code. direction is zero'd out. So it does nothing. To fix, direction.x = dir.x * -1.0. I think you were expecting direction to change during the await, but it can't change unless a value is added, or directly assigned. Anything multiplied by 0 is still 0. (I see you already caught your mistake, and you are right about checking the state during turning, using a boolean. I"ve had to do this for other things too.) I'm sorry for the all the posts; and I am no expert, but please stop coding like you're new. At least suggest to make GDScript typed, so you declare types for all your variables. This will execute code faster, and help prevent some user errors. Also, don't be lazy when typing out values. Vector3(1, 0, 0) Is lazy and slow; because Godot has to convert those integers to floats. We aren't using Vector3i, so type it out fully Vector3(1.0, 0.0, 0.0). Also you can use short cuts. For example, instead of what I typed, you could use Vector3.LEFT, which is a constant with the same values. Read the documentation. I've been told this so many times as well. lol Ugh, in your tween function, you don't have to fully type out the Vector3 if you are only changes one of its properties: turn_tween.tween_property(self, "rotation_degrees:y", 180.0, 0.6) To access a property within a property, such as x, y, z in a Vector3, you use a colon as shown above.
@jakubolszewski8079
@jakubolszewski8079 12 күн бұрын
Oh my god, you are my saviour (not on time but still). I recently participated in a gamejam, where I had problem with modifying exported glb files. I was doing so many things to make them editable and here you are with copying and pasting them to another node. I'm really thankful for that video.
@rremnar
@rremnar 12 күн бұрын
You didn't have to create a new scene. You could have moved the nodes below the 2nd Node3D object to the first one. Delete the 2nd Node3D, then change the type of the first to a character body 3D, then save it as a new scene. But I agree that it seems kind of silly having to create an aditional scene from the inherited scene, just to force the children to be editable. Maybe I missed something, but can't you make them local from the original inherited scene?
@adithyaaganapathy8506
@adithyaaganapathy8506 12 күн бұрын
Need a help ? can you just teach us how to use procedural generation in 3d for endless runner game with models which are in blender. The pre-build modes should randomly generate
@rremnar
@rremnar 12 күн бұрын
You always need to triangulate your meshes, before exporting to any game engine. I don't know what game engine allows "N" gons; I assume none do. You can triangulate by 2 means: The first one is to go into edit mode, press 3 for faces, then A for selecting all. Then right click the mesh, and there should be a triangulate function in the list. The other method is to add a generative modifier, called "Triangulate" which gives you a bit more control. Make sure to set "Apply Modifiers" to on, in the gltf export settings.
@Cr1cks0
@Cr1cks0 13 күн бұрын
ЛЕГЕНДА ВЕРНУЛАСЬ
@jayrockkz03
@jayrockkz03 13 күн бұрын
Hey can you make a tutorial on how to code an enemy that follows the player?
@pennyblush98
@pennyblush98 13 күн бұрын
I'm having an issue with the camera, whereby following your steps exactly in Godot 4.3, it will not translate nor rotate with the character model as you show in the 11th tutorial when you turn Steve around to have him face the level. Whether I might have gone wrong somewhere or if it's just an issue of the code between versions, some clarification on this issue would be nice. I'm aware a lot of the code, project templating, and modeling you do is for tutorialising and not strictly what we should follow when we make games, I just want to make sure I am doing this right. Thank you in advance.
@jynus
@jynus 13 күн бұрын
Small correction. await behaviour is the expected one. In order to "pause" the main loop excution, however, you would have to add await when *calling* the function, in addition to on the signal. It is not a Godot bug. However, your solution is not a bad one, handling async calls can become quite complicated, so a state-based design (using variables) can make thing clearer and easier to debug- specially if later more waits are needed.
@computervision557
@computervision557 12 күн бұрын
Agree, state machine works very well for game, before I try to study game development, I never feel I need a state machine
@computervision557
@computervision557 13 күн бұрын
Thanks a lot, learning a lot of things in order to create a HD-2D game
@ShadowRealmDrifter
@ShadowRealmDrifter 14 күн бұрын
Saving sanity and lives. I'm so new to this, it's not even funny. I came here to learn how to cut things in half and seperate them but learned how to set origin to geometry as well. I've wasted days fighting off center origins but had no idea even what to call them let alone how to fix them. Thank you so much.
@BornCG
@BornCG 14 күн бұрын
Thanks for joining us! My apologies for making this video like one month before the next version of blender came out that changed all of the keyboard shortcuts you use once you’re using the knife tool. 😵‍💫
@ShadowRealmDrifter
@ShadowRealmDrifter 14 күн бұрын
@BornCG no worries, I had to give up on the knife tool for what I needed anyway. Complex geometry seems to give it a problem or I'm just not understanding it. I'm having to take 3d printer files and convert them to stl to work on them in a dimensional capacity. It's been rough.
@LereveurSVP
@LereveurSVP 14 күн бұрын
I haven't started the video yet, I'm already waiting for the next part.
@taragbbcy7071
@taragbbcy7071 14 күн бұрын
I am fucked
@akuma8334
@akuma8334 14 күн бұрын
It's been so long bro 😭😭😭
@TonyIsCool45
@TonyIsCool45 14 күн бұрын
HE'S BACK!!!!
@BornCG
@BornCG 14 күн бұрын
I'm 25 minutes late, but here's the Enemy download link! (also in the description): borncg.itch.io/3d-platformer-gumdrop-enemy
@Duckz4bucks
@Duckz4bucks 14 күн бұрын
THE GOAT HAS RETURNED
@TheTyrori
@TheTyrori 14 күн бұрын
Something here just does not translate to blender 4 quite right. Following this verbatim short of the exact font (tested with multiple, same results) gets some really nasty results when you apply that boolean modifier. A whole lot of ugly triangular surfaces dig into the area around the dollar sign and some vertices are still visible on the sign itself.
@VansPebble
@VansPebble 14 күн бұрын
So far I have released my own game, added a custom playermodel, main menu screen with a level select and different songs for the different levels.
@anotherone407
@anotherone407 15 күн бұрын
At time 13:49 there is an expanded menu for the extrusion tool. I currently have blender 4.2.3 and dont have that expanded menu available. noob here. anyone know how to get that expanded menu?
@mehdiip
@mehdiip 15 күн бұрын
😅😅😅 nice . thank u so much
@TheEugevanz
@TheEugevanz 15 күн бұрын
Beautiful!! My "cup" model will never be the same again
@elitebutunspecial
@elitebutunspecial 15 күн бұрын
I ran into a problem with the folder. Managed to complete the model but when I tried to export the file, my Godot project file would not show up. I'm a bit at a dead end here.