Hola Visitante

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - bizarman

Páginas: [1] 2
1
Tutoriales / Godot 3D, Label en Bilboard
« en: 21 de Junio del 2019, 07:30 »
Vemos como poner "Label" a un objeto 3D



Creamos una nueva escena, después agrega un nodo "Control".




Cambiamos el nombre del nodo a: "Titulo", ahora agregamos un
nodo "Label", ingresamos el texto, en mi caso puse: "Texto",
guardamos la escena.



Originalmente este es nuestro personaje.




Ponemos un "Viewport" por encima de todos los otros nodos,
enlazamos la escena "Titulo" como hijo de "Viewport",
a continuación insertamos un "MeshInstance" al que llamaremos
"Texto", el ultimo nodo es hijo del personaje.




Configuramos el "Viewport":
-Establecemos un tamaño de 40x20
-En "TransparentBg", marcamos la casilla
-En "Rendering", "Disable 3d", marcamos la casilla
-Nuevamente en "Rendering", "usage", cambiamos a "2D"
-En "Render Target", "V Flip", marcamos la casilla.




Selecciona el nodo "MeshInstance" que se llama "Texto",
en "Mesh" selecciona la opción de "Nuevo QuadMesh".



Vamos a editarlo.



Le damos un tamaño de 4x2.




Volvemos nuevamente al "MeshInstance", al que le crearemos un
"Nuevo SpatialMaterial".



Sigue la edición.




Configuración del "SpatialMaterial" en orden por favor
-En "Flags", "Transparent", marcamos la casilla.
-Nuevamente en "Flags", "Unshaded", marcamos la casilla.




-En "Parameters", "Diffuse Mode", cambiamos a "Lambert"
-De nuevo en "Parameters", "Bilboard Mode", seleccionamos "Enabled".



-En "Resource", "Local To Scene", marcamos la casilla.



-En "Albedo", "Texture", elije "Nuevo ViewPortTexture".



Selecciona nuestro "Viewport".



¡Listo!




Nota:
-Funciona en Godot 3.1
-Si quieres modificar el texto, modifica la escena "Titulo",
guarda cambios y vuelve a la escena de tu personaje para ver.
-Si quieres modificar que tanto de la escena "Titulo" se
alcanza a ver modifica el tamaño del "Viewport".

2
Tutoriales / Godot 3D, Giro por desliz
« en: 05 de Junio del 2019, 00:59 »


Un personaje que al contacto con inclinaciones gira con estas.
No es un RigidBody es un KinematicBody2D.
La forma de la colisión (CollisionShape) no gira, gira la malla
(el nodo MeshInstance), puedes modificarlo para que gire todo, pero los
resultados son un poco inestables.



Ingredientes:
En este caso tiene una colisión (CollisionShape) en forma de
cubo (BoxShape)



Posicionamos el personaje, en este caso mira contrario
al eje: x, el personaje debe estar bien centrado en todos los ejes:
centrado en el eje: x
centrado en el eje: y
centrado en el eje: z
No lo centres en godot, centralo en Blender, o el programa
que usastes para crearlo.



Código: [Seleccionar]

extends KinematicBody


var velocidad_caminar = 500
var velocidad_giro = deg2rad(30)
var velocidad_salto = 600
var gravedad = -9.8
var giro = 0
var saltando = false
var direccion = Vector3()


var velocidad_torque = 9
var velocidad_amortiguacion = 5
onready var posicion_rampa = get_node("MeshInstance").get_translation() + Vector3(0, -0.5, -0.25)
onready var posicion_suelo = get_node("MeshInstance").get_translation()




func _physics_process(delta):
direccion.x = 0
direccion.z = 0

if Input.is_action_just_pressed("ui_select") and is_on_floor():
saltando = true
direccion.y = velocidad_salto * delta

if Input.is_action_pressed("ui_left"):
giro += velocidad_giro * delta

if Input.is_action_pressed("ui_right"):
giro -= velocidad_giro * delta

if Input.is_action_pressed("ui_up"):
direccion.x = -velocidad_caminar * delta

if Input.is_action_pressed("ui_down"):
direccion.x = velocidad_caminar * delta

direccion.y += gravedad * delta
direccion = direccion.rotated(Vector3(0, 1, 0), giro)

get_node("CollisionShape").set_rotation(Vector3(0, giro, 0))
get_node("MeshInstance").rotate_object_local(Vector3(0, 1, 0), giro - get_node("MeshInstance").get_rotation().y - deg2rad(90))

direccion = move_and_slide(direccion, Vector3(0, 1, 0))

if saltando and is_on_floor():
saltando = false

if get_slide_count() > 0:
var choque = get_slide_collision(0)
var normal = choque.get_normal()
if not is_on_wall():
var angulo_inicial = Vector2(normal.y, normal.z).angle()
var global = get_node("MeshInstance").get_global_transform().basis
var angulo_global = Vector2(global[1].y, global[1].z).angle()
var angulo_final = angulo_inicial - angulo_global
get_node("MeshInstance").global_rotate(Vector3(1, 0, 0), angulo_final * delta * velocidad_torque)

if abs(angulo_inicial) > deg2rad(1):
var pos_inicial = get_node("MeshInstance").get_translation()
var pos_final = posicion_rampa - pos_inicial
get_node("MeshInstance").global_translate(pos_final * delta * velocidad_amortiguacion)

if abs(angulo_inicial) < deg2rad(1):
var pos_inicial = get_node("MeshInstance").get_translation()
var pos_final = posicion_suelo - pos_inicial
get_node("MeshInstance").global_translate(pos_final * delta * velocidad_amortiguacion)


Nota:
Probado en Godot 3.1

3
Tutoriales / Godot 3D, Un personaje simple
« en: 31 de Mayo del 2019, 20:57 »

No hace uso del motor de física que trae Godot, esto puede ser útil para ahorrar recursos de la máquina.
Gira, se mueve adelante, se mueve para atrás, gira mientras se mueve, salta, se mueve mientras salta.
Godot 3.1.



Código: [Seleccionar]


extends KinematicBody


var velocidad_caminar = 300
var velocidad_giro = deg2rad(30)
var velocidad_salto = 600
var gravedad = -9.8
var giro = 0
var saltando = false


var direccion = Vector3()
func _physics_process(delta):
direccion.x = 0
direccion.z = 0

if Input.is_action_just_pressed("ui_select") and is_on_floor():
saltando = true
direccion.y = velocidad_salto * delta

if Input.is_action_pressed("ui_left"):
giro += velocidad_giro * delta

if Input.is_action_pressed("ui_right"):
giro -= velocidad_giro * delta

if Input.is_action_pressed("ui_up"):
direccion.x = -velocidad_caminar * delta

if Input.is_action_pressed("ui_down"):
direccion.x = velocidad_caminar * delta

direccion.y += gravedad * delta
direccion = direccion.rotated(Vector3(0, 1, 0), giro)

set_rotation(Vector3(0, giro, 0))

direccion = move_and_slide(direccion, Vector3(0, 1, 0))

if saltando and is_on_floor():
saltando = false


4
Tutoriales / Godot 2D, Giro por desliz
« en: 30 de Mayo del 2019, 19:56 »

Un personaje que al contacto con inclinaciones gira con estas.
No es un RigidBody es un KinematicBody2D, por rendimiento.
La forma de la colisión (CollisionShape) no gira, gira el la imagen
(el nodo Sprite), puedes modificarlo para que gire todo, pero los
resultados son un poco inestables.
Probado en Godot 3.1



Aqui su programación.
Código: [Seleccionar]

extends KinematicBody2D


var velocidad_caminar = 300
var velocidad_salto = -400
var gravedad = 980
var direccion = Vector2()
var saltando = false


var velocidad_giro = 10
onready var posicion_rampa = get_node("Sprite").get_position() + Vector2(0, 12)
onready var posicion_suelo = get_node("Sprite").get_position()


func _physics_process(delta):
direccion.x = 0

if Input.is_action_just_pressed('ui_select') and is_on_floor():
saltando = true
direccion.y = velocidad_salto

if Input.is_action_pressed('ui_right'):
direccion.x += velocidad_caminar

if Input.is_action_pressed('ui_left'):
direccion.x -= velocidad_caminar

direccion.y += gravedad * delta

if saltando and is_on_floor():
saltando = false

direccion = move_and_slide(direccion, Vector2(0, -1), true)

if get_slide_count() > 0:
var choque = get_slide_collision(0)
var normal = choque.get_normal()
var angulo_inicial = normal.angle() + deg2rad(90)
var angulo_final = angulo_inicial - get_node("Sprite").get_rotation()
get_node("Sprite").rotate(angulo_final * delta * velocidad_giro)

if angulo_inicial != 0:
var posicion_final = posicion_rampa - get_node("Sprite").get_position()
get_node("Sprite").translate(posicion_final * delta * velocidad_giro)
if angulo_inicial == 0:
var posicion_final = posicion_suelo - get_node("Sprite").get_position()
get_node("Sprite").translate(posicion_final * delta * velocidad_giro)


Nota:
El personaje tiene una colisión (CollisionShape) en forma de rectángulo (RectangleShape)

5
Programación / Re:Agarrar items para combinarlos
« en: 27 de Mayo del 2019, 06:33 »
  Bien por usar el foro  :)  y no esa algarabía de facebook  :-\ . Dices que no sabes por donde empezar, yo te recomiendo que descargues los ejemplos oficiales de Godot, dentro de la carpeta: gui importa el proyecto llamado: drag_and_drop, revisa como esta hecho e inspirare.

6
La Biblioteca / Una API traducible
« en: 22 de Mayo del 2019, 04:52 »

Si traducimos la API de Godot con el traductor de google, la
traducción deja mucho que desear.
Clic en la imagen para ver mas grande.



Pero si descargamos esta API:
https://drive.google.com/file/d/1mYf8GOqPHuICbSyvWqmK0rfwlGtn0DxX/view?usp=sharing

Ahora traducimos, el resultado es un poco mejor.
Clic en la imagen para ver mas grande.




Para buscar en la API tendremos que hacerlo con una
aplicación externa de búsqueda de archivos.
Clic en la imagen para ver mas grande.




Notas:
No traduce las constantes de clase.

7
Arte y Diseño / Godot 2D, Baldosas (Tileset)
« en: 21 de Mayo del 2019, 23:39 »
  Hoy comparto unas baldosas (tileset) listas para ser usadas en
Godot, las ilustraciones fueron creadas por:
https://www.gameart2d.com

Descarga aquí el archivo de Baldosas (Tileset) para Godot:
https://drive.google.com/file/d/19wsphbDtfR4yk9SyR9NXoA3wVdeV1Jak/view?usp=sharing


Nota:
No use todas las ilustraciones, por que normalmente en los
vídeo juegos ese tipo de imágenes están animadas, se recolectan o se
lanzan como la caja, el hongo y los letreros.
Eres libre de modificarlo como quieras.

8
Tutoriales / Servidor Godot, Cliente Python
« en: 18 de Mayo del 2019, 12:58 »

Espero se den una idea de como usar sockets en Godot
con este sencillo ejemplo.


Comenzamos con el script de python
https://drive.google.com/file/d/1_PArON1iJ00BqCxhh3H1XRm9O7p8g8jA/view?usp=sharing

Descarga, abre, escribe tu ip, escribe el puerto, guarda cambios
cierra.



Ahora la escena de Godot
https://drive.google.com/file/d/17yyA9w99mc4mp_0LZZG8wUNBggWCGr_t/view?usp=sharing

Descarga, descomprime, copia Servidor.tscn, Servidor.gd
y pega esos dos archivos en la carpeta de tu proyecto,
Reproduce la escena, escribe tu ip, escribe el puerto, activa,
en una terminal ejecuta el script de python,
ahora ya puedes comenzar a chatear.



Nota:
Funciona en Godot 3.1.

9
Tutoriales / Abre y no reproduce
« en: 15 de Mayo del 2019, 00:32 »

Abrimos el proyecto, y al momento de Reproducir nos dice:
"El controlador de la tarjeta de video no es compatible con ninguna de
las versiones de OpenGL compatibles.
Actualice sus controladores o si tiene una GPU muy antigua, actualícela".




Cerramos Godot completamente, nos vamos a la carpeta del proyecto
y abrimos el archivo "project.godot".




Buscamos la sección de "[rendering]" y agregamos las siguientes
lineas:
quality/driver/driver_name="GLES2"
vram_compression/import_etc=true
vram_compression/import_etc2=false




¡Listo! ya podemos reproducir nuestro el proyecto
hecho con GLES3 teniendo GLES2.



Nota:
No en todas las ocasiones se podrá funcionar esto
pero si en proyectos sencillos a nivel gráfico, que por suerte
son muchos.
Funciona en Godot 3.1.

10
GUI / Teclado virtual para Godot
« en: 13 de Mayo del 2019, 21:07 »
Para los juegos que usan control (Joystick).
Funciona en Godot 3.1.





¿Como lo abro?
Descarga, descomprime, copia Teclado.gd, Teclado.tscn
y pega esos dos archivos en la carpeta de tu proyecto
https://drive.google.com/file/d/1xyOU54OInr5c37U_oQcpmhLyNRqCm5UJ/view?usp=sharing



11
Tutoriales / Godot 3D, Caras que no se ven
« en: 09 de Mayo del 2019, 23:06 »
Aveces al importar nos encontramos un problema, las caras no se ven.




La solución es simple, comenzamos por poner o cargar un
"SpatialMaterial", yo cargare uno que ya tengo.



Editamos el material.




Desplegamos "Parameters", en "Cull Mode", podemos seleccionar
"Front" o "Disable", prueba con ambas.



Nota:
Funciona en Godot 3.1.

12
Tutoriales / Exportar animación hecha en Godot a imágenes
« en: 09 de Mayo del 2019, 08:53 »
Después de terminar nuestra animación en Godot, podemos exportarla
a imágenes para posteriormente convertirla en vídeo, pero deben
tener en cuenta los siguientes puntos:

-Por defecto las animaciones están a 10 fotogramas por segundo.
-La conversión de las imágenes a vídeo se hace con otro programa.
-Funciona en la versión 3.1.


Como se ve en la imagen, clic en la imagen para ver mas grande, cuando termines
tu animación agrega un nodo "Timer" como hermano de "AnimationPlayer".


Posicionamos la aguja al comienzo de la animación.




Ponemos el código al nodo padre de la escena como lo muestra
la primera imagen.

Código: [Seleccionar]
extends Node2D


var reproductor
var animacion
var pista
var duracion
var salto


var contador = 0
var temporizador


func crear_fotograma():
   var nombre = "frame_"
   var numero = str(contador * 10)
   var extencion = ".png"
   var img = get_viewport().get_texture().get_data()
   img.flip_y()
   img.save_png(nombre + numero + extencion)
   print("Frame: " + str(numero))




func avanza(_a):
   reproductor.seek(contador, true)
   reproductor.stop()
   crear_fotograma()
   contador += salto




func inicia():
   if contador >= duracion:
      reproductor.play(animacion)
      temporizador.stop()
      print("¡listo =)!")
   else:
      reproductor.play(animacion)




func _ready():
   #Nodo: AnimationPlayer
   reproductor = get_node("AnimationPlayer")
   #Nombre de tu animacion
   animacion = "subeybaja"
   pista = reproductor.get_animation(animacion)
   duracion = pista.get_length()
   salto = pista.get_step()
   reproductor.connect("animation_started", self, "avanza")
   temporizador = get_node("Timer")
   temporizador.set_wait_time(3.0)
   temporizador.connect("timeout", self, "inicia")
   temporizador.start()

Corremos la escena.


De forma automática la animación se ejecuta en cámara lenta
al mismo tiempo que se generan los fotogramas,
al terminar verán la palabra:
"¡listo =)!".


Las imágenes se encuentran en la carpeta del proyecto.


Nota:
Haz clic en la imágenes para verlas mas grandes.
Si estas en Linux, puedes convertir las imágenes a vídeo
con el comando:
ffmpeg -framerate 10 -i frame_%d.png Project.mp4

13
Tutoriales / Exporta de Blender a Godot 3D
« en: 08 de Mayo del 2019, 17:09 »

Para hacer eso posible necesitamos instalar un complemento,
funciona en Blender 2.70 en adelante.
https://github.com/godotengine/collada-exporter/archive/master.zip



Descargamos, descomprimimos y copiamos la carpeta: "io_scene_dae"
junto con el archivo: "godot_export_manager.py".




Dentro de la carpeta en la que se encuentra Blender, hay una carpeta
con el número de versión, en mi caso yo uso Blender 2.78, entonces
accedemos a la carpeta "2.78", ahora en la carpeta "scripts",
pegamos en la carpeta "addons". Si estas usando Linux
e instalastes Blender desde los repositorios entonces, pega en
"/usr/share/blender/scripts/addons/".




Abrimos Blender, desplegamos el menú "Archivo", seleccionamos
"Preferencias de usuario", nos vamos a la pestaña "Agregados",
en el buscador escribimos "collada", marcamos la casilla de la opción
"Import-Export: Better Collada Exporter", clic en "Guardar preferencias
de usuario".




Para exportar nos vamos al menú "Archivo" bajamos hasta "Exportar",
le damos en "Better Collada (.dae)", recuerda exportarlo en la carpeta
de nuestro proyecto godot.




Revisamos las opciones, en caso de que tu personaje tenga alguna
animación marca la casilla de "Export Animation", ahora seguimos
con "Export DAE".




Lo exportado se abre como una escena, abrimos el menú "Escenas",
presionamos "Abrir escena", lo seleccionamos, lo abrimos.



Nos aparece una ventana a la que le decimos "Nueva escena heredada".




Clic izquierdo sobre el nodo padre, "Cambiar tipo"
seleccionamos "Spatial", o el que necesitamos.



Guardamos la escena y esta lista para ser usada.


Nota:
Haz clic sobre la imagen para incrementar su tamaño.

14
Tutoriales / Godot 3D, Cámara de seguridad
« en: 07 de Mayo del 2019, 05:49 »
  La cámara sigue al personaje pero sin moverse.
Godot 3.1.

 

El orden de los nodos es el siguiente:



Código: [Seleccionar]

extends Camera



onready var protagonista = get_parent().get_node("Personaje")


func _physics_process(_delta):
var cliente = protagonista.get_global_transform().origin
var pos = get_global_transform().origin
var eje = Vector3(0, 1, 0)

var diferencia = pos - cliente
pos = cliente + diferencia
look_at_from_position(pos, cliente, eje)

15
Tutoriales / Godot 3D, Seguir un personaje
« en: 03 de Mayo del 2019, 01:30 »
  Un nodo seguidor



La parte frontal va en sentido contrario al Gizmo de: Z.



El Nodo que sigue se llama "Rastreador", el nodo seguido se llama "Personaje" y ambos son hermanos.



Código: [Seleccionar]

extends KinematicBody



var velocidad = 300 # Unidades / segundo


func _physics_process(delta):
#Nodo al que queremos seguir
var objetivo = get_parent().get_node("Personaje").get_translation()
look_at(objetivo, Vector3(0, 1, 0))
var mueve = (objetivo - get_translation()).normalized() * velocidad

move_and_slide(mueve * delta)

Páginas: [1] 2