miércoles, 22 de mayo de 2024

Simple script GDScript, para elevar un StaticBody3D, lentamente y continuamente; para Godot 4.2;

extends StaticBody3D


func _ready():

pass # Replace with function body.


func _process(delta):

translate(Vector3(0, -9, 0) * get_process_delta_time())

pass


------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------

EXPLICACION: Simplemente se va elevando un StaticBody3D, la idea es que cuando sale a una superficie y hace una colision se provoca un cambio de escena, este script en concreto solamente eleva un StaticBody3D, fijarse en este detalle  .............

  func _process(delta):

translate(Vector3(0, -9, 0) * get_process_delta_time())

pass

 el proceso delta hace que funcione constantemente sin detenerse, -9 es el eje -y- y los 0 serian los ejes -x- y el otro 0 el -z-  translate significa translada movimiento mover etc......un detallito de los ejes -9 hace que suba 9 hace que baje
y esta linea    * get_process_delta_time())  hace que el movimiento sea fluido y constante en cualquier tipo de pc.

lunes, 20 de mayo de 2024

Como cambiar de nivel conGodot4.2 3D al pasar por un Area3D;

extends Area3D


func _ready():

pass # Replace with function body.


func _process(delta):

pass


func _on_area_entered(area):

var siguiente_escena = preload("res://ESCENAPRINCIPAL-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

pass # Replace with function body.




----------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------

Explicacion: Estas en juego de Godot 4.2 3D, y estas en un escenario, cuando pasas por un Area3D señalada, vas a parar a otro nivel del juego, con un cambio me funciona perfectamente al igual que cambiar un arma, ahora e de continuar practicando y trabajando estas opciones que son importantisimas, tambien estoy empezando a mirar videos de youtube sobre IA persecucion de enemigos al player, todo para Godot 4.2 que es motor de videojuegos que me a enganchado, me gusta un monton¡¡¡¡

domingo, 19 de mayo de 2024

Como hacer un cambio de arma en Godot 4.2 3D; script en GDScript y video tutorial;

 extends Area3D

var Esferauno = preload("res://ESCENAS/PLAYER NUEVO BORRABLE.tscn")


# Called when the node enters the scene tree for the first time.

func _ready():

pass # Replace with function body.



# Called every frame. 'delta' is the elapsed time since the previous frame.

func _process(delta):

pass



func _on_area_entered(area):


var parent = get_parent()


var CollisionShape3Dcubo = parent.get_node("CollisionShape3D")





get_node("CollisionShape3D").queue_free()


pass # Replace with function body.



func _on_area_exited(area):


var Esferauno = Esferauno.instantiate()


add_child(Esferauno)


$"../Player".queue_free()

pass # Replace with function body.



EXPLICACION: video comentado con mi voz.


jueves, 16 de mayo de 2024

Esc para salir del juego con godot 4.2 script de GDScript;

 extends WorldEnvironment


# Called when the node enters the scene tree for the first time.

func _ready():

pass # Replace with function body.


func _process(delta):

# Verifica si se presiona la tecla Escape

if Input.is_action_pressed("ui_cancel"):

# Salir del juego

get_tree().quit()

---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
EXPLICACION: Cambie la configuracion de pantalla, para que el juego salga en 1920 por 1080, y a la vez ocupa toda la pantalla , sin este script no puedes salir del juego sin presionar Ctrl mas alt mas Supr 
que es lo que se hace para cerrar un programa en concreto que no sabes por donde pararlo.....

martes, 14 de mayo de 2024

GDScript para Godot 4.2 repaso breve de animacion repetitiva de personaje; 2 opciones, la 2ª muy muy sencilla y eficaz;

 extends Node3D

var loop_enabled = true  # Flag to control loop execution

# Called when the node enters the scene tree for the first time.

func _ready():

# Optionally, initialize things here that only need to happen once

pass

# Called every frame. 'delta' is the elapsed time since the previous frame.

func _process(delta):

if loop_enabled:

# Play the animation

$AnimationPlayer.play("LASBRAZEAS")

# Function to start the continuous loop

func start_loop():

loop_enabled = true

# Function to stop the continuous loop

func stop_loop():

loop_enabled = false

--------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
Explicacion : algunas veces la animacion de un personaje quiero que sea repetitiva y no pare esta es la mejor forma de conseguirlo y funciona de maravilla....aunque claro esta cada caso tiene su problema y su forma de resolverse las IA  son una ayuda fantastica, no te lo resuelve a la primera pero te facilita soluciones.......
------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
extends Node3D

# Called when the node enters the scene tree for the first time.
func _ready():

$AnimationPlayer.play("GIRACAVESON")  # Start the animation

func _process(delta):

pass  # Not needed for the loop functionality (can be used for other logic)



---------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------
Explicacion: este script tan sencillo soluciona un problema de loop repetitivo, cuando en la escena y en la animacion no esta marcado como un loop repetitivo....





sábado, 11 de mayo de 2024

Un metodo de hacer un cañon y moverlo con Godot 4.2 en 3d.;

 



En el video podeis ver un cañon que muevo por el escenario para godot 4.2 en 3d.

Se trata de moverlo con las teclas flechas , de girarlo con -A- y con -D- que salte al presionar espacio. Y que apunte girando en eje X presionando teclas -z- y tecla -x-.


Tenia un fallo que e conseguido corregir y era que al girar el cañon a izquierda o a derecha y presionar a la vez teclas -z- o -x- el cañon se torcia de una forma muy extraña y terminaba arrastrandose por el suelo o girando al reves.



Entoces y tras muchas pruebas y consultas tambien a una IA, e dividido el cañon en dos partes, una base que es la que lo mueve hacia adelante hacia atrás hacia izquierda y hacia derecha, que contiene un script propio que solo hace eso,

Y sobre la base esta el cañon que tiene un script para el solo que no interviene en la base principal que sirve solo para girar de izquierda a derecha y para inclinar y apuntar arriba y abajo.




En el padre (la base) que es un Characterbody3d esta este script:


extends CharacterBody3D


var rotate_speed = 10.1 # Rotation speed


const SPEED = 5.0 # Movement speed

const JUMP_VELOCITY = 14.5 # Jump velocity


var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")


func _ready():

# Replace with function body

pass


func _physics_process(delta):

if not is_on_floor():

velocity.y -= gravity * delta # Apply gravity


if Input.is_action_just_pressed("ui_accept") and is_on_floor():

velocity.y = JUMP_VELOCITY # Jump


var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") # Get input direction


var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()


if direction:

velocity.x = direction.x * SPEED # Move in X direction

velocity.z = direction.z * SPEED # Move in Z direction

else:

velocity.x = move_toward(velocity.x, 0, SPEED) # Stop horizontal movement

velocity.z = move_toward(velocity.z, 0, SPEED) # Stop vertical movement


move_and_slide() # Apply movement and collisions


var movimiento_vector = Vector3.ZERO # Initialize movement vector


if Input.is_action_pressed("A"): # Move forward

rotate_x(0.01) # Rotate on X axis (negative for down)

elif Input.is_action_pressed("B"): # Move backward

rotate_x(-0.01) # Rotate on X axis (positive for up)

elif Input.is_action_pressed("move_left"):

rotate_y(0.01) # Rotate on Z axis (positive for left)

elif Input.is_action_pressed("move_right"):

rotate_y(-0.01) # Rotate on Z axis (negative for right)


func _unhandled_input(event):

if event is InputEventKey and event.pressed:

if event.keycode == KEY_W:

translate(Vector3(0, 100, 0) * get_process_delta_time()) # Temporary movement (consider physics)







Ahora sobre esa base como hijo en el Area3D esta el siguiente script:



extends Area3D




var Bullet = preload("res://PROYECTIL.tscn")




func _ready():




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()







add_child(bullet)

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





---------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

notas aclaratorias: este script contiene tambien la instaciacion de los proyectiles.



En resumen mirar el video y obserbar la disposicion de los elementos que componen el cañon la camara etc, etc, y la situacion de cada script en cada elemento, y creo que puede serle util a alguien.

martes, 7 de mayo de 2024

GDScript, produce disparos con el mouse, rafagas de disparos girando la rueda del mouse; todo rafagas;para disparos de 1 en 1, solamente presionar 1-----if event.button_index == 1 and event.pressed :;

 extends Area3D


var Bullet = preload("res://PROYECTIL.tscn")


func _ready():


pass # Replace with function body.



func _input(event):



if event is InputEventMouseButton:


#if event.button_index == 1:

#if event.button_index == 1 and event.pressed == false:

var bullet = Bullet.instantiate()



add_child(bullet)


---------------------------------------------------------------------------

para disparos de 1 en 1, sin rafaga, sin que salgan 2 disparos al presionar 1 y soltar 1, solamente presionar 1---------------if event.button_index == 1 and event.pressed :

----------------------------------------------------------------------------

extends Area3D


var Bullet = preload("res://PROYECTIL.tscn")


func _ready():


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()



add_child(bullet)


------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------
al soltar la presion de la tecla del mouse....
--------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
extends Area3D

var Bullet = preload("res://PROYECTIL.tscn")

func _ready():

pass # Replace with function body.


func _input(event):


if event is InputEventMouseButton:

#if event.button_index == 1 and event.pressed :#AL,PRESIONAR
if event.button_index == 1 and not event.pressed :#AL SOLTAR
#event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
var bullet = Bullet.instantiate()


add_child(bullet)