extends Area3D
var Bullet = preload("res://BARCO ELEMENTOS TEXTURAS/CAÑONES/area_3dprollectil_cañon.tscn")
var fire_cooldown: float = 1.7
var can_fire: bool = true
var bullet_speed: float = 20.0
var fire_timer: Timer
func _ready() -> void:
fire_timer = Timer.new()
add_child(fire_timer)
fire_timer.wait_time = fire_cooldown
fire_timer.one_shot = true
fire_timer.timeout.connect(func(): can_fire = true)
func _process(delta: float) -> void:
if Input.is_action_pressed("DISPARACAÑON") and can_fire:
can_fire = false
instantiate_bullet()
fire_timer.start()
func instantiate_bullet() -> void:
var bullet = Bullet.instantiate()
bullet.global_transform = self.global_transform
# Comprobamos que el nodo es un RigidBody3D antes de aplicar el impulso.
if bullet is RigidBody3D:
bullet.apply_central_impulse(-self.global_transform.basis.z * bullet_speed)
else:
print("¡Error! La escena del proyectil no es un RigidBody3D y no puede recibir un impulso.")
get_tree().root.add_child(bullet)
------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
Explicacion: este Area3d que produce el disparo de un proyectil es hijo de una base que gira presionando las teclas -z-x, tenia el problema que cuando giraba el cañon el proyectil disparado tambien giraba como si formase parte del mismo giro del cañon y este GDScript corrige el problema, asi cuando disparo el proyectil sigue su curso en linea recta y en la direccion hacia donde realice el disparo y no se desvia por muchos giros que aga despues de realizado el disparo.
"DISPARACAÑON" es el nombre asociado ala tecla-c- que realiza el disparo, se dice mapa de entrada y se prepara antes de realizar cualquier GDScript, y se puede aprovechar para futuros juegos, se pueden aprovechar todos los recursos anteriores de los mapas de entrada para futuros juegos sin tener que partir de cero continuamente.
No hay comentarios:
Publicar un comentario