Godot, scripts para Godot estudios y aprendizajes, Creacion de videojuegos. Creacion y publicacion de videojuegos en internet. Como hacer videojuegos. C# unity. Animaciones unity blender. Personajes videojuegos graficos dibujos. Diseño grafico. Comic. Animaciones gif. Dibujo de retratos. Realidad virtual. Cine y realidad virtual.
viernes, 6 de diciembre de 2024
THE ELEVATOR OF TERROR;
GDScript para un CharacterBody3D; personaje que manejamos en 1ª persona; a 360 grados y a 90 grados dos ejemplos;
extends CharacterBody3D
var rotation_angle = 90.0 # Ángulo de rotación actual
var rotate_speed = 2.0 # Velocidad de rotación reducida para un giro más suave
const SPEED = 0.2 # Velocidad de movimiento
const JUMP_VELOCITY = 4.5 # Velocidad de salto
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
# Movimiento vertical (salto)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Movimiento horizontal (basado en la entrada)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
# Aplicar movimiento y rotación
move_and_slide()
# Rotación (limitada a 90 grados y más lenta)
var rotation_delta = 0.0
if Input.is_action_pressed("move_left"):
rotation_delta = rotate_speed * delta # Invertimos la dirección
elif Input.is_action_pressed("move_right"):
rotation_delta = -rotate_speed * delta # Invertimos la dirección
# Limitamos el giro a 90 grados en ambas direcciones
rotation_angle = clamp(rotation_angle + rotation_delta, -PI / 2, PI / 2)
rotate_y(rotation_delta)
# Movimiento basado en "andaradelante" (opcional)
if Input.is_action_pressed("andaradelante"):
translate(Vector3(0, 0, -0.009))
-------------------------------------------------------------------------------------------------------------------
mismo script pero limitado a 90 grados de giro., el de arriba gira 360 grados
--------------------------------------------------------------------------------------------------------
extends CharacterBody3D
var rotation_angle = 0.0 # Ángulo de rotación actual
var rotate_speed = 3.1 # Velocidad de rotación
const SPEED = 0.1 # Velocidad de movimiento
const JUMP_VELOCITY = 4.0 # Velocidad de salto
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _ready():
pass
func _physics_process(delta):
# Movimiento vertical (saltar)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Movimiento horizontal (basado en input)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
# Rotación (limitada a 60 grados)
if Input.is_action_pressed("move_left"):
if rotation_angle > -PI / 3: # -60 grados en radianes
rotation_angle -= rotate_speed * delta
rotate_y(rotate_speed * delta)
if Input.is_action_pressed("move_right"):
if rotation_angle < PI / 3: # 60 grados en radianes
rotation_angle += rotate_speed * delta
rotate_y(-rotate_speed * delta)
# Detener movimiento (opcional)
if Input.is_action_pressed("andaradelante"):
#if Input.is_action_pressed("detenerse"):
velocity.x = 0
velocity.z = 0
rotate_y(0) # Opcional, para detener la rotación también
translate(Vector3(0, 0, -0.009))
#if Input.is_action_pressed("andaradelante"):
if Input.is_action_pressed("detenerse"):
velocity.x = 0
velocity.z = 0
rotate_y(0) # Opcional, para detener la rotación también
translate(Vector3(0, 0, 0.009))
--------------------------------------------------------------------------------------------
OTRO EJEMPLO SOLO GIRA 90 GRADOS NO ABANZA NI RETROCEDE
----------------------------------------------------------------------------------------------------
extends CharacterBody3D
var rotation_angle = 0.0 # Ángulo de rotación actual
var rotate_speed = 3.1 # Velocidad de rotación
const SPEED = 0.1 # Velocidad de movimiento
const JUMP_VELOCITY = 4.0 # Velocidad de salto
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _ready():
pass
func _physics_process(delta):
# Movimiento vertical (saltar)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Movimiento horizontal (basado en input)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
# Rotación (limitada a 60 grados)
if Input.is_action_pressed("move_left"):
if rotation_angle > -PI / 3: # -60 grados en radianes
rotation_angle -= rotate_speed * delta
rotate_y(rotate_speed * delta)
if Input.is_action_pressed("move_right"):
if rotation_angle < PI / 3: # 60 grados en radianes
rotation_angle += rotate_speed * delta
rotate_y(-rotate_speed * delta)
# Detener movimiento (opcional)
if Input.is_action_pressed("detenerse"):
velocity.x = 0
velocity.z = 0
rotate_y(0) # Opcional, para detener la rotación también
# Movimiento continuo (opcional)
# Puedes reemplazar estas líneas con el movimiento deseado
# translate(Vector3(0, 0, -0.01)) # Movimiento continuo hacia adelante
jueves, 5 de diciembre de 2024
Un CharacterBody3D, limito su giro a 60 grados, para que no dispare a su espalda que me rompe la idea de juego;
extends CharacterBody3D
var rotation_angle = 0.0 # Ángulo de rotación actual
var rotate_speed = 3.1 # Velocidad de rotación
const SPEED = 0.1 # Velocidad de movimiento
const JUMP_VELOCITY = 4.0 # Velocidad de salto
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _ready():
pass
func _physics_process(delta):
# Movimiento vertical (saltar)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Movimiento horizontal (basado en input)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
# Rotación (limitada a 60 grados)
if Input.is_action_pressed("move_left"):
if rotation_angle > -PI / 3: # -60 grados en radianes
rotation_angle -= rotate_speed * delta
rotate_y(rotate_speed * delta)
if Input.is_action_pressed("move_right"):
if rotation_angle < PI / 3: # 60 grados en radianes
rotation_angle += rotate_speed * delta
rotate_y(-rotate_speed * delta)
# Detener movimiento (opcional)
if Input.is_action_pressed("detenerse"):
velocity.x = 0
velocity.z = 0
rotate_y(0) # Opcional, para detener la rotación también
# Movimiento continuo (opcional)
# Puedes reemplazar estas líneas con el movimiento deseado
# translate(Vector3(0, 0, -0.01)) # Movimiento continuo hacia adelante
-------------------------------------------------------------------------
NUEVA COMBINACION A 60 GRADOS CADA VEZ QUE SE PRESIONA TECLA
----------------------------------------------------------------------------------------------------
extends CharacterBody3D
var rotation_angle = 0.0 # Current rotation angle
var rotate_speed = 10.0 # Rotation speed (adjust as needed)
const SPEED = 0.2 # Movement speed
const JUMP_VELOCITY = 4.5 # Jump velocity
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
# Vertical movement (jumping)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Horizontal movement (based on input)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
# Apply movement and rotation
move_and_slide()
# Rotation (limited to 60 degrees)
if Input.is_action_pressed("move_left"):
if rotation_angle > -PI / 3:
rotation_angle -= rotate_speed * delta
rotate_y(rotate_speed * delta)
elif Input.is_action_pressed("move_right"):
if rotation_angle < PI / 3:
rotation_angle += rotate_speed * delta
rotate_y(-rotate_speed * delta)
else:
rotation_angle = move_toward(rotation_angle, 0, rotate_speed * delta)
rotate_y(-rotation_angle * delta) # Smoothly rotate back to center
# Movement based on "andaradelante" action (optional)
if Input.is_action_pressed("andaradelante"):
translate(Vector3(0, 0, -0.009))
# Mouse-based movement (optional)
if Input.is_action_pressed("mouse_left"):
translate(Vector3(0.0, 0.00, -0.04))
--------------------------------------------------------------------------
OTRO RESULTADO DE EQUILIBRIO DE GIRO
---------------------------------------------------------------------------------
extends CharacterBody3D
var rotation_angle = 0.0 # Ángulo de rotación actual
var rotate_speed = 10.0 # Velocidad de rotación
const SPEED = 0.2 # Velocidad de movimiento
const JUMP_VELOCITY = 4.5 # Velocidad de salto
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
var is_rotating_left = false
var is_rotating_right = false
func _physics_process(delta):
# Vertical movement (jumping)
if not is_on_floor():
velocity.y -= gravity * delta
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
# Horizontal movement (based on input)
var input_dir = Input.get_vector("ui_left", "ui_right", "andaradelante", "detenerse")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
# Apply movement and rotation
move_and_slide()
# Rotation (limited to 60 degrees, one time per press)
if Input.is_action_just_pressed("move_left") and not is_rotating_left:
if rotation_angle > -PI / 3:
rotation_angle -= rotate_speed * delta
rotate_y(rotate_speed * delta)
is_rotating_left = true
elif Input.is_action_just_released("move_left"):
is_rotating_left = false
if Input.is_action_just_pressed("move_right") and not is_rotating_right:
if rotation_angle < PI / 3:
rotation_angle += rotate_speed * delta
rotate_y(-rotate_speed * delta)
is_rotating_right = true
elif Input.is_action_just_released("move_right"):
is_rotating_right = false
# Movement based on "andaradelante" (optional)
if Input.is_action_pressed("andaradelante"):
translate(Vector3(0, 0, -0.009))
viernes, 29 de noviembre de 2024
GDScript, una animacion la detiene al presionar tecla "u" con mapa de entrada llamado"paraanimacion" al soltar prosige;
extends Node3D
var animation_player = null
var animation_playing = false
var target_animation = "MakeHuman default skeleton|pistolaenmanodisparando"
func _ready():
# Obtener una referencia al nodo AnimationPlayer
animation_player = $AnimationPlayer
# Reproducir la animación si existe
animation_player.play(target_animation)
animation_playing = true
func _process(delta):
# Controlar la reproducción de la animación con la tecla "u"
if Input.is_action_pressed("paraanimacion"):
if animation_playing:
# Detener la animación
animation_player.stop()
animation_playing = false
elif Input.is_action_just_released("paraanimacion"):
if not animation_playing:
# Reanudar la animación
animation_player.play(target_animation)
animation_playing = true
lunes, 25 de noviembre de 2024
extends CPUParticles3D, GDScript rota el plano de particulas constantemente; para conseguir efectos;
extends CPUParticles3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
rotate_z(1.2)
pass
--------------------------------------------------------
otro ejemplo en otro eje
----------------------------------------------------------
extends CPUParticles3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
rotate_x(2)
pass
jueves, 21 de noviembre de 2024
GDScript para Godot 4.3 por tiempo cambia la escena, por presional tecla del pc numero -9- cambia la escena, y al presionar -esc- sales del juego;
extends Node
var tiempo_transcurrido = 0.0 # Variable para almacenar el tiempo transcurrido
func _process(delta):
if Input.is_action_pressed("ui_cancel"):
get_tree().quit()
tiempo_transcurrido += delta
if tiempo_transcurrido >= 12.0:
#queue_free()
var siguiente_escena = preload("res://ESCENAS/world_environmentESCENA PRINCIPAL-9-.tscn") # Precargar la escena
get_tree().change_scene_to_packed(siguiente_escena) # Cambiar a la escena precargada (Godot 4.2)
#queue_free() # Liberar este nodo después del cambio de escena
# Nueva condición para cambiar de escena al presionar "9"
if Input.is_action_just_pressed("PISONUEVEPEROBOYAL10"):
var nueva_escena = preload("res://ESCENAS/world_environmentESCENA PRINCIPAL-9-.tscn")
get_tree().change_scene_to_packed(nueva_escena)
pass # Replace with function body.
miércoles, 20 de noviembre de 2024
Trabajo que publicare en itchi.io, perico415 - itch.io calculo en enero del 2025,;
https://perico415.itch.io/
Despues de 11 meses mas o menos casi un año de desarrollar con Godot, muestro este video de mi proximo trabajo que publicare en itchi.io, perico415 - itch.io calculo en enero del 2025, en estos 11 meses publique en itchi.io varios juegos, todos de tematica adulta,
Todos con bastante audiencia, y algunas capturas de video muy exitosas, teniendo en cuenta que no soy Youtuber de éxito y popular,
Realmente no me arrepiento de cambiarme a Godot antes usaba Unity, pero veia mucho royo, y para ser un aficionado en estos temas de desarrollar videojuegos, yo solo quiero hacerme rico haciendo juegos, no necesito a Unity ni trabajar para una empresa, yo me vasto y me sobro para ganar mucha pasta¡¡¡¡
Soy sarcastico….pero realmente me siento capaz de cualquier cosa!!!!
No ahora en serio, me gusta muchisimo crear videojuegos, y con Godot me siento muy comodo.
Y me encanta ver como suben un monton las visitas a mi pagina de Itch.io. perico415 - itch.io .
En este video, muestro mi proximo trabajo, tematica de intriga y misterio y surrealismo, me inspira el ambiente nocturno del cine de terror, me inspira Stephen king,
El juego va de un ascensor y de situaciones al vajar y subir plantas de un edificio, en cada planta procuro cambiar la escena, las animaciones , me da por hacerlas manualmente incluso las de caminar que son muy muy dificiles de hacer, pero lo estoy haciendo, y el juego tendra todo un mismo estilo de movimiento y de graficos 3d, podria poner animaciones ya echas realistas, pero me esta gustando hacerlas yo, y si desarrollo juegos es por diversion no por obligacion,
La IA del navegador Microsoft Edge me esta ayudando muchisimo en el tema de programacion GDScript que es el que usa Godot 4.3, es la version que estoy utilizando.
No te resuelve la papeleta, tienes que ir preguntando y probando y cambiando lineas de codigo, y al final estoy teniendo muy buenos resultados, lo mejor cuando un codigo, un script funciona, puedes hacer cambios y añadirle lineas o cambiarlas, y voy aprendiendo.
Ayuda a aprender es como tener un profesor particular.
Pondre varios scripts que utilizo en el juego, algunos vienen con el propio Godot otros los e retocado yo sacando informacion de aquí y de aya,
En este juego estoy empezando a manipular barra de vida, algo estoy haciendo y saldra en el juego, con script que me proporciono la IA , puedo manipular ideas y temas que salen en el juego,
Mis herramientas de trabajo son, Godot 4.3, Blender, Gimp, Paint, Makehuman, lmms , practicamente casi todos de tipo software libre.org , tambien uso algo de la web OpenGameArt.org .
Y efectos de sonido de https://www.videvo.net/
E conseguido hacer efectos de tembleque del ascensor, efectos de aparecer y desaparecer de fantasmas, cambiar escenas con facilidad por paso de tiempo o presionando alguna tecla del pc,
Me encanta y me gusta muchisimo poder jugar con las camaras y sus enfoques, haciendo un juego de estilo como de cine y de comic.
Y bueno hay estoy con mi maravillosa aficion, con la que pienso hacerme multimillonario……..perdon con la que pienso entretenerme asta el fin de mis dias, si la salud me lo permite, que pienso seran muchos años ya que para esto no hace falta correr maratones ni levantar cargas pesadas de 50 kilos, ….
Eso si paciencia….toneladas….contancia...eterna. Espero guste el video ...ala asta luego!!!!!
A continuacion algunos scripts GDScript que uso en el juego, ayudado por la IA, sino imposible no tengo estudios de programacion.........
extends MeshInstance3D
func _input(event):
# Comprobamos si es un evento de teclado
if event is InputEventKey:
if event.pressed:
if event.keycode == KEY_Z:
rotate_x(0.04)
elif event.keycode == KEY_X:
rotate_x(-0.04)
# Comprobamos si es un evento de acción de entrada
elif event is InputEventAction:
pass
#func _input(event):
if event is InputEventMouseButton:
if event.pressed and event.is_action("mouse_rueda_arriba"):
#if event.action == "mouse_rueda_arriba":
rotate_x(-0.04)
elif event.pressed and event.is_action("mouse_rueda_avajo"):
#elif event.action == "mouse_rueda_avajo":
rotate_x(0.04)
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Node3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
$AnimationPlayer.play("Esqueleto|EsqueletoAction")
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
#$"CSGBox3D2ASCENSOR4 puertaabre".play("puertaascensor")
$MeshInstance3D.play("corredera")
pass # Replace with function body.
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
var siguiente_escena = preload("res://ESCENAS/world_environmentESCENA PRINCIPAL-2-.tscn") # Precargar la escena
get_tree().change_scene_to_packed(siguiente_escena) # Cambiar a la escena precargada (Godot 4.2)
queue_free() # Liberar este nodo después del cambio de escena
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
queue_free()
pass # Replace with function body.
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
$MeshInstance3D/AnimationPlayer.play("CORREDERAS")
pass # Replace with function body.
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Area3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_area_entered(area: Area3D) -> void:
$"../CSGBox3D2ASCENSOR4 puertaabre".play($"../CSGBox3D2ASCENSOR4 puertaabre/AnimationPlayer")
pass # Replace with function body.
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
extends Area3D
var Bullet = preload("res://EL PROTAGONISTA/BALA PROYECTIL/PROYECTIL.tscn")
#var Bullet2 = preload("res://EL PROTAGONISTA/FOGONAZO PISTOLA/cpu_particles_3dfogonazo.tscn")
func _ready() -> void:
pass # Replace with function body.
func _input(event):
if event is InputEventMouseButton:
if event.button_index == 1 and event.pressed :
#event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
var bullet = Bullet.instantiate()
#var bullet2 = Bullet2.instantiate()
add_child(bullet)
#add_child(bullet2)
func _unhandled_input(event):
if event is InputEventKey and event.pressed:
if event.keycode == KEY_W:
translate(Vector3(0, 0, 0) * get_process_delta_time()) # Temporary movement (consider physics)
#if event.keycode == KEY_
#apply_impulse(Vector3(0,40,4))#ORIGINAL
if event.keycode == KEY_Z:
rotate_x(0.02)
pass
if event.keycode == KEY_X:
rotate_x(-0.02)
pass
if event is InputEventMouseButton:
if event.pressed and event.is_action("mouse_rueda_arriba"):
#if event.action == "mouse_rueda_arriba":
rotate_x(-0.02)
elif event.pressed and event.is_action("mouse_rueda_avajo"):
#elif event.action == "mouse_rueda_avajo":
rotate_x(0.02)
pass
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo