Godot, scripts para Godot estudios y aprendizajes, Creacion de videojuegos. Creacion y publicacion de videojuegos en internet. Como hacer videojuegos. C# unity. Animaciones unity blender. Personajes videojuegos graficos dibujos. Diseño grafico. Comic. Animaciones gif. Dibujo de retratos. Realidad virtual. Cine y realidad virtual.
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