[06]エネミーのバレット

2Dシューティング

プレーヤーのバレットと同じくArea2DでSprite、Collisionを追加しLayerを指定

バレットのスクリプト
移動方向がプレイヤーと逆

extends Area2D

# 移動スピード
const move_speed = 200.0

var direction = 1

func _ready() -> void:
	await get_tree().create_timer(3).timeout
	queue_free()

func _physics_process(delta: float) -> void:
	position.y += direction * move_speed * delta
	

エネミーにバレット発射を追加

extends CharacterBody2D

# 移動スピード
const move_speed = 30.0

var direction: Vector2

# バレット
var canShoot = true
const ENEMY_BULLET = preload("res://scenes/enemy_bullet.tscn")
@onready var marker_2d: Marker2D = $Marker2D
@onready var shoot_timer: Timer = $shootTimer

func _ready() -> void:
	add_to_group("enemies")

func _physics_process(delta: float) -> void:
	direction.y = 1
	velocity = direction.normalized() * move_speed
	position += velocity * delta

	shoot()
	
	move_and_slide()

func _on_visible_on_screen_notifier_2d_screen_exited() -> void:
	print("outside")
	queue_free()
	
func shoot():
	if canShoot:
		canShoot = false
		shoot_timer.start()

		var bullet = ENEMY_BULLET.instantiate()
		bullet.set_position(marker_2d.global_position)
		get_parent().add_child(bullet)

func _on_shoot_timer_timeout() -> void:
	canShoot = true