敵がステージの上から落ちないようにしたい
問題点
敵がステージの端に来たときに、落ちないように方向転換するスクリプトを書いたのですが、上手くいかない。
![](https://assets.st-note.com/img/1705327574093-y7rzxQ75Me.png)
class_name Enemey extends CharacterBody2D
@onready var sprite = $AnimatedSprite2D
@onready var right = $RayRight as RayCast2D
@onready var left = $RayLeft as RayCast2D
@onready var speed = Global.enemy_speed
func _process(delta):
velocity.y += Global.gravity * delta
if not right.is_colliding() or not left.is_colliding():
speed = -speed
velocity.x = speed
sprite.play("run")
sprite.flip_h = velocity.x > 0
move_and_slide()
上記スクリプトでは、なぜかうまく動かない。is_colliding()の部分が間違えていることだけはわかる。
解決法
is_colliding()の部分を以下の様に書く
class_name Enemy1 extends CharacterBody2D
@onready var sprite = $AnimatedSprite2D
@onready var right = $RayRight as RayCast2D
@onready var left = $RayLeft as RayCast2D
@onready var speed = Global.enemy_speed
func _process(delta):
velocity.y += Global.gravity * delta
if not right.is_colliding():
speed = -Global.enemy_speed
if not left.is_colliding():
speed = Global.enemy_speed
velocity.x = speed
sprite.play("idle_run")
sprite.flip_h = velocity.x > 0
move_and_slide()
解説/ヒント
横着してはいけない。