Mostrando entradas con la etiqueta GDScript para Godot 4.6.3 para CharacterBody3D. Mostrar todas las entradas
Mostrando entradas con la etiqueta GDScript para Godot 4.6.3 para CharacterBody3D. Mostrar todas las entradas

martes, 2 de junio de 2026

GDScript para Godot 4.6.3 para CharacterBody3D, animaciones muy correctas; resuelve se mueva de su sitio con los pies quietos;

 extends CharacterBody3D


var rotate_speed = 0.001

@export var SPEED: float = 3.0  # Velocidad normal de caminar

#const SPEED = 3.0  # Velocidad normal de caminar

const RUN_SPEED = 10.0  # Velocidad más alta para correr


const JUMP_VELOCITY = 2.5

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


# --- NUEVAS VARIABLES PARA EL GIRO SUAVE ---

var velocidad_giro_actual = 0.0

@export var velocidad_maxima_giro: float = 0.35

#var velocidad_maxima_giro = 0.35

var suavizado_giro = 0.01

# -------------------------------------------


func _ready():

pass


func _physics_process(delta):

# Gravedad, siempre activa

if not is_on_floor():

velocity.y -= gravity * delta


# El salto se activa al mantener pulsado

if Input.is_action_pressed("ui_accept"):

velocity.y = JUMP_VELOCITY

# Lógica de movimiento normal

var current_speed = SPEED

var direction = Vector3.ZERO

# 1. Calculamos la dirección como si todo funcionara normal

if Input.is_action_pressed("CORRECACA"):

direction = -transform.basis.z 

current_speed = RUN_SPEED

else:

# Nota: Usamos solo el eje vertical (Y) del vector para caminar adelante/atrás

var input_dir = Input.get_vector("GIRAIZQUIERDACONA", "GIRADERECHACOND", "ANDAATRASCONS", "ANDAALANTECONW")

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

current_speed = SPEED

# 2. EL FILTRO DE SEGURIDAD ABSOLUTO: 

# Si en este preciso instante están las dos pulsadas, anulamos la velocidad inmediatamente

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

if Input.is_action_pressed("ANDAALANTECONW") and (Input.is_action_pressed("mouse_right") or Input.is_action_pressed("mouse_left")):

velocity.x = 0.0

velocity.z = 0.0

else:

# Si no se cumple la combinación, aplicamos el movimiento que calculamos antes

if direction:

velocity.x = direction.x * current_speed

velocity.z = direction.z * current_speed

else:

velocity.x = move_toward(velocity.x, 0, current_speed)

velocity.z = move_toward(velocity.z, 0, current_speed)

move_and_slide()


# --- LÓGICA DE GIRO SUAVE ---

var direccion_giro = 0.0

if Input.is_action_pressed("GIRAIZQUIERDACONA"):

direccion_giro += 0.5

if Input.is_action_pressed("GIRADERECHACOND"):

direccion_giro -= 0.5

# Calculamos el objetivo y suavizamos la velocidad

var objetivo = direccion_giro * velocidad_maxima_giro

velocidad_giro_actual = lerp(velocidad_giro_actual, objetivo, suavizado_giro)

# Aplicamos la rotación suave

rotate_y(velocidad_giro_actual)

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

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

Explicacion: Este GDScript, funciona muy bien alternando al disparar o al lanzar granadas el personaje, que no se mueva de su sitio con los pies quietos, un error que quedaba muy feo y este GDS lo resuelve; Tenia el problema que si presionaba -w-w que es para avanzar y caminar el personaje avanzaba de todas formas si estaba disparando con los pies parados o si lanzaba bomba de mano con los pies parados......


Te gusta algo del bloc? ¡¡apoyame con un cafe!! ¡¡gracias!!
Do you like anything on the blog? Support me with a coffee!! Thank you!!