Mostrando entradas con la etiqueta animaciones muy correctas ;resuelve se mueva de su sitio con los pies quietos;;. Mostrar todas las entradas
Mostrando entradas con la etiqueta animaciones muy correctas ;resuelve se mueva de su sitio con los pies quietos;;. 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!!