2:57 considero más conveniente el usar los grupos de Godot y por código checar si el objeto copiable está en el grupo usando "if body.is_in_group("objeto aprendible")". Esa sería la forma en la que yo lo haría pero igual tu forma de hacerlo es muy original, Buen video 👌
Eso es lo bueno de Godot, que una misma cosa se puede hacer de varias formas. Yo utilizara las collision layers. Que los objetos interactuables se agreguen a una layer en específico con set_collision_layer_bit y que el área solo detecte esas colisiones en el collision_mask, de modo que no hay que averiguar si los objetos tienen un método o grupo, pues todos los objetos detectados lo tendrán
@@dgreengames En cuanto a rendimiento es la mejor. Yo le hubiera puesto esa información en la info meta del los objetos, que al final es parecido a los grupos pero más rebuscado
me encanta este cambio del canal que estas dando, la verdad me recuerda mucho ahora a Guinxu, entiendo que has extraido la inspiración para crear este nuevo formato de ese canal. Enhorabuena por tu trabajo y tu aprendizaje.
Hola me gusto mucho el video, quizás en ves de agregar el script con el método vacío también se podía agregar los objetos a un grupo que es solo un poco mas fácil y luego cambiar la condición para detectar grupos. Sigue así aprendo mucho de tus videos!
Me encantan tus videos...y tú curso de Blender está genial!! Me encantaría que hagas algo con la referencia de algún juego de Pokémon! Te mando un abrazo
me encantan tus videos, los uso como referencia pues tengo u nproyecto entre manos, uso Unity, pero aunque te hayas pasado a Godot, la logica de mecanicas y demas es la misma, lo que me hace preguntarte: Godot tiene algun sistema similar a los Tags y los Prefabs de Unity? pues me doy cuenta que te lias un poco en la parte de "aprender los objetos" cuando quieres que el sistema identifique el tipo de objeto que puedes guardar para luego usarlo, en unity podrias asignarle un Tag, asi ya tienes una categoria que te permite llamar ese objeto desde cualquier script, y por la parte del Prefab, pues guardarias ese Prefab sin tener q mandar al engine a buscar la ruta. a ver, no se mucho de programacion, pero entiendo un poco de logica (escribir codigo no es lo mio, uso playmaker, visual script y ChatGPT) Quizas no tenga sentido lo q estoy planteando, pero bueno, asi aprendo 😅
Muy bueno German, nose si estoy en lo correcto, pero Godot puede agrupar nodos y con eso podrías verificar si el nodo forma parte de ese grupo, entiendo q es el método "correcto" y un poco mas pulido para saber si los elementos son agarrables ( por lo menos en los tutoriales que vi, siempre lo hacen así, y tiene sentido) por otro lado me gustaba mas el contenido relacionado a como avanzabas en tu videojuego, buen video igualmente, saludos!
Otra solución que se me ocurre. Es simplemente cambiar el collision mask de su area2D a 5 y hacer que cada objeto agarrable añadirles un collision layer también en 5 para que detecte solo los objetos que puede agarrar
Podrías, por favor. En una próxima edición, recrear la mecánica de agarrar, soltar y patear la caracola de Super Mario World. Agarrar: Cuando el jugador se acerca a la caracola y preciona para agarrar, la caracola se pega al jugador siguiendo todos sus movimientos, creo que el término correcto que se usa es, la caracola pasa a ser hijo del jugador. Soltar: Al dejar de presionar el botón de agarrar, la caracola deja de ser hijo del jugador y aplica una fuerza "patada" y sale disparada a la dirección que el jugador mira, tambien se podría aplicar fuerza de patasa en Y, para que se dispare hacía arriba. Patear: El jugador al entrar en contacto con la caracola y no pulsa la tecla de agarrar, entonces pateará la caracola. Detener caracola: Para detener la caracola, se debe saltar encima de esta, esto proporcionara al jugador un impulso de salto que dependera del salto del jugador, con esto puede hacerse shell jump, etc. Nota: Si el jugador no aumenta su velocidad al patear o soltar la caracola, esta salera disparada con la fuerza patada, si corre y golpea o suelta la caracola, la caracola sale disparada con mayor velocidad. Cuando la caracola choca contra un muro cambia su velocidad al lado contrario, esto para que vaya de izquierda a derecha dependiendo si choca contra un muro que está a la izquierda o derecha. Tener en cuenta que la caracola no puede afectar las físicas del jugador ni su colisión. Te dejo un video que podría ayudar: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-5UH8p91KOQ8.htmlsi=g04BXOnX_HK0HqtR
Está perfect!! Pero tengo esta duda.. ¿crees que mejoraría el rendimiento si siempre tienes apagado el área que detecta los objetos... y que solo se encienda cuando presionas el boton?
Una excelente implementación Germán! Me encanta!, yo tal vez intentaría usar grupos o una clase para los objetos aprendibles, pero tu implementación está genial!
Duda técnica, ¿En lugar de agregarles un método "imALearnableObject" se podría haber manejado que esos objetos estuvieran en un layer diferente al resto de objetos y que al copiar validara que fuese de ese layer? O resulta peor en la práctica?
3:08 Otra alternativa sería usar "grupos" añadiendo los nodos a un grupo con un nombre específico, y si el objeto está en ese grupo entonces que lo pueda aprender, y así te ahorras la función
Hola Germán! pequeña nota sobre el minuto 2:42 cuando creas el método de comprobación de los objetos para saber si son compatibles y los puedes duplicar hay otra forma con la que puedes comprobar, sin agregar scripts a cada objeto, y de hecho creo es la opción... mas practica? usando las herramientas que Godot ofrece EN FIN, AL GRANO en la parte en donde está el inspector, nodo e History En el apartado de -Nodo- hay -Señales- y -Grupos- pues la parte de grupos te puede interesar puedes nombrar un grupo ahí mismo y asignárselo a los objetos que necesites por ejemplo, en este caso los agregas al grupo "duplicable" para comprobar que son duplicables puedes hacer uso de node.is_in_group("duplicable") de esta forma también puedes crear otros códigos especiales comprobando si cada objeto está en grupos como Enemigos, Objetos Interactivos, NPCs, Monedas, coleccionables, etc. Espero la info te sirva ;3 Salu2 :D ... pd. la pequeña nota se alargó un poco XD
AH! y si mal no recuerdo luego puedes agregar objetos a grupos tambien por codigo como para agregarlos a grupos mientras el jugador está en partida por ejemplo se podría usar si hay... personajes que puedan cambiar entre ser enemigos o amigos a mitad de partida al transformarse puedes usar node.add_to_group("Amigo") o node.add_to_group("Enemigo") y de la misma forma eliminarlos de los grupos con node.remove_from_group("Amigo") o node.remove_from_group("Enemigo") de nuevo, me parece algo útil a tener en cuenta, para agregar mas posibilidades aun :b
Wow! Te quedó excelente! Una pregunta, no sería más fácil usar grupos en lugar del script para detectar si un objeto es 'aprendible'? Muy buen vídeo, por cierto, como siempre :D
@@AlejandroGCode Basicamente es algo con lo que puedes marcar a cualquier nodo y luego desde el código, usando is_in_group("el grupo"), puedes ver si tal nodo está dentro de ese grupo
@@inigodot ejemplo si está dentro del grupo madera podría hacer que cuando interactúes con ese nodo suene el efecto de sonido para los objetos de madera
muy piola, me encanta y creo que podría funcionar para revisar archivos y spawnar objetos colocados externamente(mod de personajes) pero le falto lo de spawnear en casillas(en el tráiler se ve que coloca una mesa desde otra y queda perfectamente posicionada sin que se ponga a calcular la posición de el objeto)
Hola! Gran recreación, pero has considerado usar grupos para diferenciar a los objetos que si son aprendibles? Asi solo tendrias que comprovar si estan en el grupo: "objetosAprendibles", o el nombre que le pusieras, en vez de añadir un script a cada uno. Buen video!
Sonara a chiste pero ayer yo estaba buscando cómo poder invocar un nodo en la posición del jugador sin tener que hacerle referencia en el árbol de escenas y como ya estaba cansado en vez de ponerme investigar me puse a ver videos en RU-vid y me salió justamente un video que mostraban cómo aserlo
Consulta, en la deteccion del objecto se podia filtrar usando los layers, dejando los que solo aquellos que sean aprendibles pertenezcan a un layer particular? desconozco si se puede hacer asi pero seria una buena prueba. PD: me encantan estos videos
Muchas gracias por el video, es muy informativo pero creo que se podría mejorar un poco (entiendo que al ser una recreación no hace falta pulirlo mucho pero no creo que se tarde mucho). En vez de poner una función vacía dentro del objeto seria mejor ponerlos en un grupo y agregarlos al condicional de cuando aprietas ese botón en especifico, además en el juego se pueden guardar varios objetos a la vez cosa que haría haciendo una lista donde se guarden y una variable que al pulsar un botón fuera incrementado hasta llegar al máximo de la listo haciendo que cuando lo superara volviera a cero conectando esa variable con la función de crear los objetos. También habría que añadir a la función de copiar una linea para comprobar que el objeto ya este guardado en la lista y así optimizarlo un poco.
hola una duda. no seria mejor en vez de usar una función seria crear un grupo con para los objectos obtenibles y hacer un if si el objecto esta en ese grupo?
Pregunta, sabes como hacer que los personajes tengan lineas tipo toon, sin duplicar poligonos? Lo intenté como shader (en godot) y en el modelaje (blender) pero no logro un resultado bueno
¿Germán es posible hacer movimientos con el click derecho y habilidades con el teclado, tipo League of Legends en GODOT? ¿Podrías intentarlo por favor?
Lo único que puede darte problemas es en la dirección en la que aparece el objeto mirando, ya que cuando copiaste la pared y la pusiste siempre salía verticalmente, si no retocaras eso tendrías que usar siempre objetos iguales por todos los lados, como cuadrados o circulos
interesante, aunque para optimizar mas el código debiste hacer una comprobación de detección al oprimir el botón, de esa manera no esta comprobando siempre y así lo optimizas.
Un truco para no andar añadiendo codigos vacio en objetos que no requieren codigo pero que quieras poder copia puedes usar los grupos En lugar de el el codigo añadirle un metodo Desde el mismo inspertor te vas a los grupos y lo añades
Pero utiliza como bandera una propiedad, no un método. Podés crear una clase base que tenga la propiedad `imLearnable` y que todos los objetos aprendiblez la extienda.
No digo que está estrategia de marketing está mal. Ya que atraes a público de la industria de videojuegos y no de blender como pasaba antes. Peroooo, deberías hablar más del tuyo. Es un material más intimo y más emocionante sin ser educativo.