viernes, 13 de diciembre de 2024

Presiona "espacio" e instancia proyectil en godot 4.3 con GDScript;

 extends Area3D


var Bullet = preload("res://PROYECTILSIMULACIONDEGOLPE/area_3d RESIMULARAGOLPE.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 InputEventKey:

if event.keycode == KEY_SPACE and event.pressed:

var bullet = Bullet.instantiate()

#var bullet2 = Bullet2.instantiate()


add_child(bullet)

martes, 10 de diciembre de 2024

Combinacion de un GDScript para un CharacterBody3D + GDScript para activar animacion de un personaje= movimientos fluidos con sentido;

 extends Node3D




var animacion_actual = "MakeHuman default skeleton|NUEVACAMINATA"#ANIMACION CONTINUA Y FIJA DE CAMINAR


func _ready():

#$AnimationPlayer.play("MakeHuman default skeleton|NUEVACAMINATA")#ANIMACION CONTINUA Y FIJA

pass # Replace with function body.


func _physics_process(delta):


# Agacharse


if Input.is_action_just_pressed("ui_accept"):#TECLA ESPACIO AL PRESIONAR GOLPEA


if animacion_actual != "MakeHuman default skeleton|ATCA":


$AnimationPlayer.play("MakeHuman default skeleton|ATCA")


animacion_actual = "MakeHuman default skeleton|ATCA"


if Input.is_action_just_released("ui_accept"):#TECLA ESPACIO AL SOLTAR VUELVE ANIMACION ANDAR


if animacion_actual != "MakeHuman default skeleton|NUEVACAMINATA":


$AnimationPlayer.play("MakeHuman default skeleton|NUEVACAMINATA")


animacion_actual = "MakeHuman default skeleton|NUEVACAMINATA"

if Input.is_action_just_pressed("RETUERCE"):#TECLA ALT AL PRESIONAR DA ZARPAZO


if animacion_actual != "MakeHuman default skeleton|BOFETON":


$AnimationPlayer.play("MakeHuman default skeleton|BOFETON")


animacion_actual = "MakeHuman default skeleton|BOFETON"



if Input.is_action_just_released("RETUERCE"):#TECLA ALT AL SOLTAR VUELVE A CAMINAR NORMAL


if animacion_actual != "MakeHuman default skeleton|NUEVACAMINATA":


$AnimationPlayer.play("MakeHuman default skeleton|NUEVACAMINATA")


animacion_actual = "MakeHuman default skeleton|NUEVACAMINATA"

if Input.is_action_just_pressed("FLECHA"):#TECLA ALT AL PRESIONAR DA ZARPAZO


if animacion_actual != "MakeHuman default skeleton|ANDASOLO":


$AnimationPlayer.play("MakeHuman default skeleton|ANDASOLO")


animacion_actual = "MakeHuman default skeleton|ANDASOLO"





if Input.is_action_just_released("FLECHA"):#TECLA ALT AL PRESIONAR DA ZARPAZO


if animacion_actual != "MakeHuman default skeleton|NUEVACAMINATA":


$AnimationPlayer.play("MakeHuman default skeleton|NUEVACAMINATA")


animacion_actual = "MakeHuman default skeleton|NUEVACAMINATA"



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

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

extends CharacterBody3D


var rotate_speed = 10.1  # Rotation speed


const SPEED = 8.0  # Movement speed

const JUMP_VELOCITY = 3.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_down", "ui_up",)  # 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_y(0.04)  # Rotate on X axis (negative for down)

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

rotate_y(-0.04)  # 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.04)  # Rotate on Z axis (positive for left)

elif Input.is_action_pressed("move_right"):

rotate_y(0.04)  # Rotate on Z axis (negative for right)



#if Input.is_action_just_pressed("ui_accept"):





func _unhandled_input(event):

if event is InputEventKey and event.pressed:

if event.keycode == KEY_W:

translate(Vector3(0, 0, 60) * get_process_delta_time()) 

#if Input.Input.is_action_pressed()("ANDAALANTECONW"):

#translate(Vector3(0, 0, 30) * get_process_delta_time()) 



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

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

Explicacion: practicas de GDScript para animar personajes que al abanzar camine que si esta parado no se mueva , y combinarlo con zarpazos y movimientos..........aun esta verde....pero va saliendo lo que busco.

lunes, 9 de diciembre de 2024

GDScript, para Godot 4.3, andar y dar dos golpes zarpazos diferentes, presionando, ESPACIO tecla y ALT tecla;

 




extends Node3D




var animacion_actual = "ANDASOLO"#ANIMACION CONTINUA Y FIJA DE CAMINAR


func _ready():

$AnimationPlayer.play("ANDASOLO")#ANIMACION CONTINUA Y FIJA

pass # Replace with function body.


func _physics_process(delta):


# Agacharse


if Input.is_action_just_pressed("ui_accept"):#TECLA ESPACIO AL PRESIONAR GOLPEA


if animacion_actual != "MakeHuman default skeleton|ATCA":


$AnimationPlayer.play("MakeHuman default skeleton|ATCA")


animacion_actual = "MakeHuman default skeleton|ATCA"


if Input.is_action_just_released("ui_accept"):#TECLA ESPACIO AL SOLTAR VUELVE ANIMACION ANDAR


if animacion_actual != "MakeHuman default skeleton|ANDASOLO":


$AnimationPlayer.play("MakeHuman default skeleton|ANDASOLO")


animacion_actual = "MakeHuman default skeleton|ANDASOLO"

if Input.is_action_just_pressed("RETUERCE"):#TECLA ALT AL PRESIONAR DA ZARPAZO


if animacion_actual != "MakeHuman default skeleton|GIRACABEZAYZARPAZO":


$AnimationPlayer.play("MakeHuman default skeleton|GIRACABEZAYZARPAZO")


animacion_actual = "MakeHuman default skeleton|GIRACABEZAYZARPAZO"



if Input.is_action_just_released("RETUERCE"):#TECLA ALT AL SOLTAR VUELVE A CAMINAR NORMAL


if animacion_actual != "MakeHuman default skeleton|ANDASOLO":


$AnimationPlayer.play("MakeHuman default skeleton|ANDASOLO")


animacion_actual = "MakeHuman default skeleton|ANDASOLO"

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

Explicación: en este GDScript e conseguido hacer las animaciones de andar y de golpear de dos formas diferentes , y que de forma fluida y coherente den movimiento al personaje, la animación de andar es continua al presionar tecla espacio da un zarpazo, la misma tecla al soltarla el personaje vuelve a  andar y de la misma forma al presionar tecla alt el personaje da otro tipo de movimiento de ataque diferente y al soltar tecla alt vuelve a la animación de andar con normalidad......


las teclas alt y espacio estan en el mapa de entrada de godot4.3 con el nombre de ATACA y de RETUERCE.....

son animaciones echas a mano, me gusta hacerlas yo aun son torpes pero estoy completamente seguro que con mas tiempo y practicas tendran mas calidad y seran mas personales y estilisticas....


musica del video de https://creativecommons.org/licenses/by/4.0/

domingo, 8 de diciembre de 2024

GDScript, personaje animado anda presiono espacio ataca suelto espacio sigue andando;

 extends Node3D




var animacion_actual = "ANDASOLO"


func _ready():

$AnimationPlayer.play("ANDASOLO")

pass # Replace with function body.


func _physics_process(delta):


# Agacharse


if Input.is_action_just_pressed("ui_accept"):


if animacion_actual != "MakeHuman default skeleton|ATCA":


$AnimationPlayer.play("MakeHuman default skeleton|ATCA")


animacion_actual = "MakeHuman default skeleton|ATCA"


if Input.is_action_just_released("ui_accept"):


if animacion_actual != "MakeHuman default skeleton|ANDASOLO":


$AnimationPlayer.play("MakeHuman default skeleton|ANDASOLO")


animacion_actual = "MakeHuman default skeleton|ANDASOLO"

Pegar un objeto a un hueso con blender; muy facil; Control +P;

 

Contol+P , 

-1 añadir vacio.

-2 añadir objeto.

-3 fusionar vacio y objeto con Control +P

-4 seleccionar el hueso de la mano y el vacio y fusionarlos con Control+P en modo Hueso.

Observar el video y practicar, muy util para pasarlo luego a motores de juegos, tipo Godot.

(musica de fondo pertenece a:https://creativecommons.org/licenses/...)


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