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

viernes, 12 de junio de 2026

Estupendo extends CharacterBody3D GDScript para Godot 4.6.3 ;

 extends CharacterBody3D


var rotate_speed = 0.001

@export var SPEED: float = 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 suavizado_giro = 0.01

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


func _ready():

pass


func _physics_process(delta):

# 1. GRAVEDAD: Siempre activa si no tocamos el suelo

if not is_on_floor():

velocity.y -= gravity * delta


# 2. EL SALTO: Ahora usa tu acción "SALTA" (la barra espaciadora)

# Solo se activa un golpe por pulsación y exige estar tocando el suelo

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

velocity.y = JUMP_VELOCITY

# Lógica de movimiento normal

var current_speed = SPEED

var direction = Vector3.ZERO

# 3. CALCULAMOS DIRECCIÓN Y VELOCIDAD SEGÚN ENTRADAS

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

# 4. EL FILTRO DE SEGURIDAD ABSOLUTO (¡Tu lógica!)

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

# Frenazo en seco en el plano horizontal (X, Z), pero permitimos que la Y siga su curso

velocity.x = 0.0

velocity.z = 0.0

else:

# Si no se cumple la combinación, aplicamos el movimiento normal por el suelo

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)

# 5. MOVER EL CUERPO (Aplica X, Y y Z de golpe)

move_and_slide()


# --- 6. 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 de la rotación

var objetivo = direccion_giro * velocidad_maxima_giro

velocidad_giro_actual = lerp(velocidad_giro_actual, objetivo, suavizado_giro)

# Aplicamos la rotación suave en el eje Y

rotate_y(velocidad_giro_actual)


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Explicacion: perfilando mejorando de forma realista los movimientos de un  CharacterBody3D  antes al saltar el personaje, se apoyaba en el mismo aire y saltaba mas hacia arriba sin ninguna base, eso no tiene sentido, aqui ya no lo hace.......