jueves, 5 de diciembre de 2024

Un CharacterBody3D, limito su giro a 60 grados, para que no dispare a su espalda que me rompe la idea de juego;

 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




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

NUEVA COMBINACION A 60 GRADOS CADA VEZ QUE SE PRESIONA TECLA

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


extends CharacterBody3D


var rotation_angle = 0.0  # Current rotation angle

var rotate_speed = 10.0  # Rotation speed (adjust as needed)


const SPEED = 0.2        # Movement speed

const JUMP_VELOCITY = 4.5 # Jump velocity


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


func _physics_process(delta):

# Vertical movement (jumping)

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


# Horizontal movement (based on 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)


# Apply movement and rotation

move_and_slide()


# Rotation (limited to 60 degrees)

if Input.is_action_pressed("move_left"):

if rotation_angle > -PI / 3:

rotation_angle -= rotate_speed * delta

rotate_y(rotate_speed * delta)

elif Input.is_action_pressed("move_right"):

if rotation_angle < PI / 3:

rotation_angle += rotate_speed * delta

rotate_y(-rotate_speed * delta)

else:

rotation_angle = move_toward(rotation_angle, 0, rotate_speed * delta)

rotate_y(-rotation_angle * delta)  # Smoothly rotate back to center


# Movement based on "andaradelante" action (optional)

if Input.is_action_pressed("andaradelante"):

translate(Vector3(0, 0, -0.009))


# Mouse-based movement (optional)

if Input.is_action_pressed("mouse_left"):

translate(Vector3(0.0, 0.00, -0.04))


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

OTRO RESULTADO DE EQUILIBRIO DE GIRO

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


extends CharacterBody3D


var rotation_angle = 0.0  # Ángulo de rotación actual

var rotate_speed = 10.0  # Velocidad de rotación


const SPEED = 0.2        # Velocidad de movimiento

const JUMP_VELOCITY = 4.5 # Velocidad de salto


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


var is_rotating_left = false

var is_rotating_right = false


func _physics_process(delta):

# Vertical movement (jumping)

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


# Horizontal movement (based on 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)


# Apply movement and rotation

move_and_slide()


# Rotation (limited to 60 degrees, one time per press)

if Input.is_action_just_pressed("move_left") and not is_rotating_left:

if rotation_angle > -PI / 3:

rotation_angle -= rotate_speed * delta

rotate_y(rotate_speed * delta)

is_rotating_left = true

elif Input.is_action_just_released("move_left"):

is_rotating_left = false


if Input.is_action_just_pressed("move_right") and not is_rotating_right:

if rotation_angle < PI / 3:

rotation_angle += rotate_speed * delta

rotate_y(-rotate_speed * delta)

is_rotating_right = true

elif Input.is_action_just_released("move_right"):

is_rotating_right = false


# Movement based on "andaradelante" (optional)

if Input.is_action_pressed("andaradelante"):

translate(Vector3(0, 0, -0.009))


No hay comentarios:

Publicar un comentario