Много игри включват някакъв вид враг, с който да се биете. Разгледайте различните начини, по които можете да добавите — и финес — вражеската битка.

Враговете играят решаваща роля, за да направят игрите вълнуващи и предизвикателни за играчите. Независимо дали създавате 2D платформинг, стрелба отгоре надолу или ролева игра, добавянето на врагове може значително да подобри игровото изживяване.

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

Настройване на играта Godot

Преди да се потопите в създаването на враг, настройте основната структура на вашата 2D игра игровият двигател Godot.

Създайте нов 2D проект в Godot. В основната сцена създайте нова KinematicBody2D възел и го наименувайте Играч. Във възела на играча добавете a CollisionShape2D с правоъгълна форма, която ще бъде хитбоксът на играча. Също така добавете a Спрайт възел като визуално представяне на героя на играча.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

instagram viewer

Прикачете следния GDScript код към Играч възел за активиране на основно движение:

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.

Създаване на обикновен враг

След като вече имате настроен персонаж на играч, можете да създадете прост враг.

Създайте нова сцена и добавете a Статично тяло2D възел с име враг. Вътре във възела Enemy добавете a CollisionShape2D възел с кръгла форма, за да дефинира хитбокса на врага. Също така добавете a Спрайт възел за визуално представяне на врага.

С настроения сблъсък врагът ще бъде готов да взаимодейства с играча и други елементи във вашия свят на игра.

Накарайте врага да следва играча

Създаването на врагове, които следват играча, добавя ново ниво на предизвикателство към играта.

Създайте нова сцена за следния тип враг и добавете a KinematicBody2D възел с име FollowEnemy с 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)

Сега, на FollowEnemy ще се придвижи към позицията на играча във всеки кадър.

Добавяне на вражески куршуми

Сега можете да накарате врага да стреля с куршуми към играча. Създайте нова сцена и я наименувайте Bullet.tscn. Добави KinematicBody2D възел към сцената. Прикрепете 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. Вътре във възела ShootingEnemy добавете a CollisionShape2D възел с правоъгълна форма като hitbox.

Прикрепете следния 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. Ако е, тогава стреляйте с куршума.

Произволно движещ се враг

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

Започнете със създаване на нова сцена и добавете a KinematicBody2D възел с име RandomEnemy. Създайте нов скрипт с име 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 Games по-ангажиращи с враговете

Враговете са основен компонент на много игри, осигурявайки предизвикателства, препятствия и чувство за постижение, когато бъдат победени. Чрез добавяне на различни видове врагове с различно поведение, здравни точки и механика на стрелба, можете да създадете разнообразни и завладяващи геймплей изживявания за играчите.

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