Godot Version
4.3
Question
I’m making a shoot 'em up boss rush game, and I can make bullets spawn that go forwards and backwards. However, I can’t make them go sideways of the boss. Could anyone please tell me how to make a bullet that can go any direction? I’ve been stuck on this problem for a little while now.
Code
Bullet:
extends CharacterBody3D
var direction: Vector3
var new_direction: Vector3
var StartPos: Vector3
var in_parry_zone = false
func _ready() -> void:
global_transform.origin = StartPos
new_direction = direction
func _physics_process(delta: float) -> void:
velocity = new_direction
move_and_slide()
func _on_area_3d_body_entered(body: Node3D) -> void:
if body.is_in_group("player"):
body.hit = true
queue_free()
Boss:
extends CharacterBody3D
@onready var timer: Timer = $Timer
var SPEED = 15
var bullet = preload("res://normal_bullet.tscn")
var started_liftoff = false
var HP = 200
var invicible = true
var hit = false
var spawner: float
var phase = 1
func _ready() -> void:
timer.start()
func _process(delta: float) -> void:
if phase == 2:
rotation.y -= 0.02
timer.wait_time = 0.3
if HP <= 100:
phase = 2
StatHandler.boss_position = global_position
if hit:
HP -= 10
hit = false
var player = get_tree().get_first_node_in_group("player")
if player != null and phase == 1:
look_at_target_interpolated(0.05)
if HP <= 0:
kill()
func look_at_target_interpolated(weight: float) -> void:
var player = get_tree().get_first_node_in_group("player")
var xform := transform
xform = xform.looking_at(player.global_position, Vector3.UP)
transform = transform.interpolate_with(xform, weight)
func _on_timer_timeout() -> void:
var player = get_tree().get_first_node_in_group("player")
if StatHandler.boss_ready:
if player != null:
var instance = bullet.instantiate()
instance.direction = global_transform.basis.z.normalized() * -1 * SPEED
instance.StartPos = global_position
add_sibling(instance)
if phase == 2:
var instance2 = bullet.instantiate()
instance2.direction = global_transform.basis.z.normalized() * 1 * SPEED
instance2.StartPos = global_position
add_sibling(instance2)
func kill():
StatHandler.boss_ready = false
queue_free()
func ready_up():
StatHandler.boss_ready = true
Any help would be greatly appreciated!