(摘) Godot 玩家进入敌人视野

声明:内容源自网络,版权归原作者所有。若有侵权请在网页聊天中联系我

通过区域判断玩家是否"入圈", 通过RayCast2D判断玩家是否可以触及.
多个RayCast2D避免头或尾部份"暴露"而未有检测到.

extends Area2D

signal player_detecded(body: Node2D)

@onready var special_collision: CollisionPolygon2D = $specialCollision
@onready var raycasts = [$RayCast2D, $RayCast2D2, $RayCast2D3]

var player: Node2D

func _physics_process(delta: float) -> void:
	if not player: return

	if _is_detected(player):
		player_detecded.emit(player)
		player = null

func _is_detected(player):
	raycasts[0].look_at(player.global_position - 16 * transform.y)
	raycasts[1].look_at(player.global_position)
	raycasts[2].look_at(player.global_position + 16 * transform.y)

	for raycast: RayCast2D in raycasts:
		if raycast.is_colliding():
			if raycast.get_collider().is_in_group("player"):
				print("发现玩家")
				return true

	return false

func _on_body_entered(body: Node2D):
	if body.is_in_group("player"):
		print("玩家进圈")
		player = body

func _on_body_exited(body:Node2D):
	if body.is_in_group("player"):
		print("玩家出圈")
		player = null

func set_color(color):
	special_collision.change_color(color)

相关文章