敵がステージの上から落ちないようにしたい

問題点

敵がステージの端に来たときに、落ちないように方向転換するスクリプトを書いたのですが、上手くいかない。


RayCast2Dを左右に設定する
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()

解説/ヒント

横着してはいけない。

この記事が気に入ったらサポートをしてみませんか?