Во многих играх есть враги, с которыми нужно сражаться. Исследуйте различные способы, которыми вы можете добавить — и усовершенствовать — бои с врагами.

Враги играют решающую роль в том, чтобы сделать игры интересными и сложными для игроков. Создаете ли вы 2D-платформер, шутер с видом сверху или ролевую игру, добавление врагов может значительно улучшить игровой процесс.

Удобный интерфейс Godot и интуитивно понятный язык сценариев GDScript делают процесс эффективным и приятным.

Настройка игры Годо

Прежде чем погрузиться в создание врагов, настройте базовую структуру вашей 2D-игры в игровой движок Godot.

Создайте новый 2D-проект в Godot. В основной сцене создайте новый кинематическоетело2D узел и назовите его Игрок. Внутри узла player добавьте CollisionShape2D с прямоугольной формой, которая будет хитбоксом игрока. Также добавьте Спрайт узел как визуальное представление персонажа игрока.

Код, используемый в этой статье, доступен в этом Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.

instagram viewer

Прикрепите следующий код GDScript к Игрок node для включения основного движения:

extends KinematicBody2D

const SPEED = 200

func _physics_process(delta):
var motion = Vector2.ZERO

if Input.is_action_pressed("ui_right"):
motion.x += SPEED

if Input.is_action_pressed("ui_left"):
motion.x -= SPEED

if Input.is_action_pressed("ui_down"):
motion.y += SPEED

if Input.is_action_pressed("ui_up"):
motion.y -= SPEED

motion = move_and_slide(motion)

С помощью этого кода игрок может перемещаться влево, вправо, вверх и вниз с помощью клавиш со стрелками или клавиш WASD.

Создание простого врага

Теперь, когда у вас настроен игровой персонаж, вы можете создать простого врага.

Создайте новую сцену и добавьте StaticBody2D узел с именем Враг. Внутри узла Enemy добавьте CollisionShape2D узел в форме круга, чтобы определить хитбокс врага. Также добавьте Спрайт узел для визуального представления врага.

После настройки столкновения враг будет готов взаимодействовать с игроком и другими элементами в вашем игровом мире.

Заставить врага следовать за игроком

Создание врагов, следующих за игроком, добавляет в игру новый уровень сложности.

Создайте новую сцену для следующего типа врага и добавьте кинематическоетело2D узел с именем СледоватьВраг с CollisionShape2D. Прикрепите следующий код GDScript к узлу FollowEnemy, чтобы заставить его следовать за игроком:

extends KinematicBody2D

const SPEED = 100

func _physics_process(delta):
var player = get_parent().get_node("Player")
var player_position = player.global_position
var enemy_position = global_position
var direction = player_position - enemy_position
direction = direction.normalized()

var motion = direction * SPEED * delta
move_and_collide(motion)

Сейчас СледоватьВраг будет двигаться к позиции игрока в каждом кадре.

Добавление вражеских пуль

Теперь вы можете заставить врага стрелять пулями в игрока. Создайте новую сцену и назовите ее Bullet.tscn. Добавить кинематическоетело2D узел на сцену. Прикрепите Bullet.gd скрипт для узла KinematicBody2D в сцене Bullet.tscn. Добавьте следующий код, чтобы определить класс Bullet:

extends KinematicBody2D

const BULLET_SPEED = 300
var bullet_direction = Vector2.ZERO

func _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)

func set_direction(direction):
bullet_direction = direction.normalized()

Теперь создайте новый узел для врага с пулями и назовите его СтрельбаВраг. Внутри узла ShootingEnemy добавьте CollisionShape2D узел с прямоугольной формой в качестве хитбокса.

Прикрепите следующий код GDScript к узлу ShootingEnemy, чтобы он стрелял пулями:

extends KinematicBody2D

const SPEED = 100
const SHOOT_DELAY = 1.5
var shoot_timer = SHOOT_DELAY

# Import the Bullet scene
const BulletScene = preload("res://Bullet.tscn")

func _physics_process(delta):

# Shooting logic
shoot_timer -= delta

if shoot_timer <= 0:
shoot_timer = SHOOT_DELAY
var bullet_instance = BulletScene.instance()
bullet_instance.global_position = global_position
bullet_instance.set_direction(direction)
get_parent().add_child(bullet_instance)

Враг теперь будет периодически стрелять пулями в сторону игрока. Используйте условное если заявление чтобы проверить, если стрелять_таймер меньше 0. Если это так, то стреляйте в пулю.

Случайно движущийся враг

В дополнение к врагам, которые следуют за игроком или стреляют в него, случайно движущийся враг может привнести элемент непредсказуемости и сложности в вашу игру. Создание врага со случайными моделями движения требует сочетания простой логики и генерации случайных чисел.

Начните с создания новой сцены и добавьте кинематическоетело2D узел с именем СлучайныйВраг. Создайте новый скрипт с именем RandomEnemy.gd и прикрепите его к узлу RandomEnemy. Скрипт будет обрабатывать логику случайного движения.

extends KinematicBody2D

const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0

var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZERO

func _ready():
choose_new_direction()

func choose_new_direction():
move_interval = rand_range(MOVE_INTERVAL_MIN, MOVE_INTERVAL_MAX)
move_timer = move_interval
move_direction = Vector2(randf(), randf()).normalized()

func _physics_process(delta):
move_timer -= delta

if move_timer <= 0.0:
choose_new_direction()

var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)

Включая дополнительные функции

Есть много дополнительных функций, которые вы можете добавить своим врагам, чтобы сделать игровой процесс более интересным.

Битвы с боссами

Битвы с боссами являются кульминационными моментами в вашей игре, обеспечивая незабываемые и сложные встречи, которые проверяют навыки и настойчивость игроков. Враги-боссы, как правило, крупнее и сильнее, чем обычные враги, поэтому игрокам требуется использовать определенные стратегии и тактики, чтобы победить их.

Динамическое появление врагов

Реализуйте динамическую систему возрождения, которая регулирует встречи с врагами в зависимости от производительности игрока, местоположения или внутриигровых событий. Это создает более отзывчивый и персонализированный игровой процесс.

Экологическая адаптация

Создавайте врагов, которые могут адаптироваться к окружающей среде, например, врагов, которые могут летать, плавать или карабкаться по стенам. Эта универсальность открывает новые возможности игрового процесса и заставляет игроков перемещаться по разным ландшафтам.

Слабые стороны врага и сопротивление

Назначайте врагам определенные слабости и сопротивления, побуждая игроков экспериментировать с различными подходами и тактиками. Некоторые враги могут быть уязвимы к определенным атакам или элементам, в то время как другие невосприимчивы или устойчивы.

Настройка врагов и варианты поведения

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

Включение множества этих дополнительных функций может обогатить дизайн врага в вашей игре, сделав каждое столкновение уникальным и запоминающимся для игроков.

Помните, что, хотя введение новых механик может быть захватывающим, крайне важно поддерживать баланс и согласованность в общем дизайне вашей игры.

Лучшие практики для создания врагов

При создании врагов в игре Godot учитывайте следующие рекомендации:

Четкая визуальная коммуникация

Используйте различные дизайны врагов, которые выделяются из окружающей среды, чтобы сделать врагов легко узнаваемыми.

Рассмотрите возможность использования цветового кодирования или уникальных силуэтов, чтобы различать типы врагов. Убедитесь, что анимация врагов и визуальные эффекты усиливают их поведение и атаки.

Балансировка трудности

Постепенно добавляйте врагов с возрастающей сложностью по мере прохождения игры. Испытайте столкновения с врагами с игроками разного уровня мастерства, чтобы убедиться, что испытания подходят для всех игроков. Избегайте внезапных скачков сложности, которые могут расстроить игроков.

Избегайте дешевых выстрелов

Создавайте врагов с атаками, от которых игрок может уклоняться или блокировать, давая им возможность среагировать. Используйте правильный хитбокс для атак врагов, избегая атак, которые выходят за рамки их визуального представления. Используйте предупреждающие знаки или сигналы, чтобы намекнуть на опасные атаки.

Игровое тестирование и итерация

Регулярно проверяйте столкновения с врагами во время разработки, чтобы оценить их забавность и сложность. Собирайте отзывы игроков и используйте их для тонкой настройки поведения, сильных и слабых сторон противника.

Звуковые эффекты

Звуковые эффекты играют решающую роль в создании захватывающей и увлекательной игровой среды. Когда враг получает удар, добавьте соответствующий звуковые эффекты без авторских прав чтобы усилить чувство удара и участия в бою.

Ваша игра может сопровождать каждый удар или попадание отдельными звуковыми сигналами, соответствующими типу атаки и характеристикам противника.

Делаем игры Godot более увлекательными с врагами

Враги являются основным компонентом многих игр, создавая проблемы, препятствия и чувство выполненного долга после поражения. Добавляя различные типы врагов с различным поведением, очками здоровья и механикой стрельбы, вы можете создавать разнообразные и увлекательные игровые процессы для игроков.

Не забудьте сбалансировать сложность, обеспечить визуальную и звуковую обратную связь и тщательно проверить своих врагов, чтобы предоставить игрокам приятный и полезный игровой опыт.