Mostrando entradas con la etiqueta Un metodo de hacer un cañon y moverlo con Godot 4.2 en 3d.;. Mostrar todas las entradas
Mostrando entradas con la etiqueta Un metodo de hacer un cañon y moverlo con Godot 4.2 en 3d.;. Mostrar todas las entradas

sábado, 11 de mayo de 2024

Un metodo de hacer un cañon y moverlo con Godot 4.2 en 3d.;

 



En el video podeis ver un cañon que muevo por el escenario para godot 4.2 en 3d.

Se trata de moverlo con las teclas flechas , de girarlo con -A- y con -D- que salte al presionar espacio. Y que apunte girando en eje X presionando teclas -z- y tecla -x-.


Tenia un fallo que e conseguido corregir y era que al girar el cañon a izquierda o a derecha y presionar a la vez teclas -z- o -x- el cañon se torcia de una forma muy extraña y terminaba arrastrandose por el suelo o girando al reves.



Entoces y tras muchas pruebas y consultas tambien a una IA, e dividido el cañon en dos partes, una base que es la que lo mueve hacia adelante hacia atrás hacia izquierda y hacia derecha, que contiene un script propio que solo hace eso,

Y sobre la base esta el cañon que tiene un script para el solo que no interviene en la base principal que sirve solo para girar de izquierda a derecha y para inclinar y apuntar arriba y abajo.




En el padre (la base) que es un Characterbody3d esta este script:


extends CharacterBody3D


var rotate_speed = 10.1 # Rotation speed


const SPEED = 5.0 # Movement speed

const JUMP_VELOCITY = 14.5 # Jump velocity


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


func _ready():

# Replace with function body

pass


func _physics_process(delta):

if not is_on_floor():

velocity.y -= gravity * delta # Apply gravity


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

velocity.y = JUMP_VELOCITY # Jump


var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") # Get input direction


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


if direction:

velocity.x = direction.x * SPEED # Move in X direction

velocity.z = direction.z * SPEED # Move in Z direction

else:

velocity.x = move_toward(velocity.x, 0, SPEED) # Stop horizontal movement

velocity.z = move_toward(velocity.z, 0, SPEED) # Stop vertical movement


move_and_slide() # Apply movement and collisions


var movimiento_vector = Vector3.ZERO # Initialize movement vector


if Input.is_action_pressed("A"): # Move forward

rotate_x(0.01) # Rotate on X axis (negative for down)

elif Input.is_action_pressed("B"): # Move backward

rotate_x(-0.01) # Rotate on X axis (positive for up)

elif Input.is_action_pressed("move_left"):

rotate_y(0.01) # Rotate on Z axis (positive for left)

elif Input.is_action_pressed("move_right"):

rotate_y(-0.01) # Rotate on Z axis (negative for right)


func _unhandled_input(event):

if event is InputEventKey and event.pressed:

if event.keycode == KEY_W:

translate(Vector3(0, 100, 0) * get_process_delta_time()) # Temporary movement (consider physics)







Ahora sobre esa base como hijo en el Area3D esta el siguiente script:



extends Area3D




var Bullet = preload("res://PROYECTIL.tscn")




func _ready():




pass # Replace with function body.






func _input(event):






if event is InputEventMouseButton:




if event.button_index == 1 and event.pressed :


#event.button_index == MOUSE_BUTTON_LEFT and event.pressed:


var bullet = Bullet.instantiate()







add_child(bullet)

func _unhandled_input(event):

if event is InputEventKey and event.pressed:

if event.keycode == KEY_W:

translate(Vector3(0, 0, 0) * get_process_delta_time()) # Temporary movement (consider physics)


#if event.keycode == KEY_


#apply_impulse(Vector3(0,40,4))#ORIGINAL



if event.keycode == KEY_Z:

rotate_x(0.02)

#pass

if event.keycode == KEY_X:

rotate_x(-0.02)

#pass





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

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

notas aclaratorias: este script contiene tambien la instaciacion de los proyectiles.



En resumen mirar el video y obserbar la disposicion de los elementos que componen el cañon la camara etc, etc, y la situacion de cada script en cada elemento, y creo que puede serle util a alguien.