Hola Visitante

Mensajes recientes

Páginas: [1] 2 3 ... 10
1
Programación / Re:Velocidad de un rigidbody
« Último mensaje por Asylum en 17 de Julio del 2019, 05:28 »
¿Has tratado de usar get_linear_velocity()? No he usado rigidbody, pero en la documentación la mencionan.


No existe,  o al menos no se como aplicarlo,  es para 3d nada de 2d , y solo hay una línea de código linear_velocity,  el asunto está que no he podido resolver saber cuanto el rígidbody encara hacia un lugar me de datos de cuanta velocidad esta generando, hasta el momento lo más que llegue hacer y ver datos es :


var xxx = linear_velocity * self.transform.basis.z.normalized ()


ya con esto me da valores de 0 ++ si de desplazamiento es hacia adelante y  de 0-- si el desplazamiento es hacia atrás,  lo único es que solo me da valores correspondiente al eje con respecto al mundo y no como local,  es decir que si me desplazó en dirección z del mundo me da valores pero si giro y me desplazo hacia el eje X del mundo se queda en 0
2
Programación / Re:Velocidad de un rigidbody
« Último mensaje por davidoc en 15 de Julio del 2019, 17:34 »
¿Has tratado de usar get_linear_velocity()? No he usado rigidbody, pero en la documentación la mencionan.
3
Programación / Re:Velocidad de un rigidbody
« Último mensaje por Asylum en 06 de Julio del 2019, 08:23 »
Me parece que este foro es de puro novatos como yo que andamos más perdiós que adan el día de las madres... nadie tiene alguna idea sin mandar a la documentación,  un ejemplo?
4
Programación / Velocidad de un rigidbody
« Último mensaje por Asylum en 02 de Julio del 2019, 06:35 »
Saludos gente del foro , mi duda es como saber la velocidad que lleva un rigidbody hacia donde se está desplazando , osea hacia el eje donde encara... por ejemplo hay un assets de automóvil donde se le aplica fuerza al vehículo dándole valor positivo o negativo al engine_force, en el mismo código  aparece una formula para saber el kilometraje que recorre el vehículo calculada mediante la posición anterior con respecto a la actual entre el tiempo.... pero yo quiero saber es la velocidad del rigidbody que lleva al aplicarle una fuerza. Recuerdo que es para rigidbody 3d
5
3D / Re:Rígidbody aplicar fuerzas y torque
« Último mensaje por Asylum en 01 de Julio del 2019, 07:54 »
Creo que aquí no iba este post,  de todas formas ya solucione el tema y dejo el  código por si alguien está interesado y le sirva de algo

Código: [Seleccionar]
extend  RígidBody


var Fuerza = 10
var TorqueX
var TorqueY
var TorqueZ


func physics_process(delta)
     if Input.is_action_pressed ("ui_up"):
          TorqueX = 1
     if Input.is_action_pressed ("ui_down"):
          TorqueX = -1
     if Input.is_action_pressed ("ui_left"):
          TorqueZ = -1
     if Input.is_action_pressed ("ui_rigth"):
          TorqueZ = 1
     if Input.is_action_pressed ("ui_A"):
          TorqueY = -1
     if Input.is_action_pressed ("ui_D"):
          TorqueY = 1
     if Input.is_action_pressed ("ui_W"):
          FuerzaY = 1
     if Input.is_action_pressed ("ui_S"):
          FuerzaY = -1


     var torqueValue = Vector3 ()


     torqueValue += self.global_transform.basis.x.normalized () * Fuerza * TorqueX


     torqueValue -= self.global_transform.basis.y.normalized () * Fuerza * TorqueY


     torqueValue += self.global_transform.basis.z.normalized () * Fuerza * TorqueZ


     Add_torque(torqueValue )


     var dirección = self.global_transform.basic.y.normalized ()
     Add_force (dirección * Fuerza * FuerzaY,  (self.global_transform.origin - global_transform.origin.normalized ())


Con esto he conseguido aplicar fuerza y torque al cuerpo rígido en sus coordenadas locales
6
3D / Rígidbody aplicar fuerzas y torque
« Último mensaje por Asylum en 29 de Junio del 2019, 06:44 »
Hola a todos! Soy nuevo en  godot y me gustaría saber como haría las líneas de  código para un rigidbody y aplicarle fuerzas y torque, ah pero el asunto está en que no se como hacer para que al aplicar la fuerza se le sea dada al vector local,  osea si aplico torque y luego fuerza esta actúe hacia donde ve el cuerpo rígido... vengo de unity y hacer eso es más fácil pero aquí en godot todo afecta al eje global
7
Tutoriales / Godot 3D, Label en Bilboard
« Último mensaje por bizarman 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".
8
Tutoriales / Godot 3D, Giro por desliz
« Último mensaje por bizarman 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
9
Tutoriales / Godot 3D, Un personaje simple
« Último mensaje por bizarman 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

10
Tutoriales / Godot 2D, Giro por desliz
« Último mensaje por bizarman 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)
Páginas: [1] 2 3 ... 10