Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Скрипт для моба на godot 4.1.3

Владислав Ушаков Ученик (136), открыт 4 недели назад
Помогите сделать скрипт для моба на godot 4.1.3 чтобы он мог ходить за игроком если тот находится в его зоне видимости атаковать и наносить урон игроку если игрок находится в зоне атаки моба в 2д игре с видом камеры сбоку
2 ответа
Рустам Абдрашитов Мыслитель (9520) 4 недели назад
Лови
 extends CharacterBody3D 

@export var speed = 5.0
@export var detection_radius = 10.0
@export var attack_radius = 2.0
@export var attack_damage = 10
@export var attack_cooldown = 1.0

var player: CharacterBody3D = null
var can_attack = true

func _ready():
# Найдите игрока в сцене (предполагается, что у игрока есть группа "player")
player = get_tree().get_nodes_in_group("player")[0]

func _physics_process(delta):
if player:
var distance_to_player = global_position.distance_to(player.global_position)

if distance_to_player <= detection_radius:
# Игрок в зоне видимости, двигаемся к нему
var direction = (player.global_position - global_position).normalized()
velocity = direction * speed
move_and_slide()

look_at(player.global_position, Vector3.UP)

if distance_to_player <= attack_radius and can_attack:
attack()

func attack():
print("Моб атакует!")
if player.has_method("take_damage"):
player.take_damage(attack_damage)

can_attack = false
get_tree().create_timer(attack_cooldown).timeout.connect(reset_attack_cooldown)

func reset_attack_cooldown():
can_attack = true

# Добавьте этот метод к игроку
func take_damage(amount):
print(f"Игрок получил {amount} урона!")
# Здесь реализуйте логику получения урона игроком
мамa чoмy я です Профи (586) 4 недели назад
Тебе надо создать Area2D, которая детектит вхождение игрока. Если игрок внутри, ты должен рассчитать вектор направления в сторону игрока функцией direction_to, либо путем вычитания позиции врага из позиции игрока с последующей нормализацией вектора. Затем полученный вектор направления надо будет умножить на скорость, присвоить это значение свойству velocity, а в конце вызвать функцию move_and_slide() - ГОТОВО

Ах, я не дочитал, что у тебя вид сбоку. Ну в целом логика такая же, но тебе надо оперировать только x координатой, не трогая y
Похожие вопросы