Muitos jogos incluem algum tipo de inimigo para lutar. Explore as várias maneiras de adicionar — e aprimorar — o combate inimigo.
Os inimigos desempenham um papel crucial em tornar os jogos emocionantes e desafiadores para os jogadores. Esteja você criando um jogo de plataforma 2D, um jogo de tiro de cima para baixo ou um RPG, adicionar inimigos pode melhorar significativamente a experiência de jogo.
A interface amigável do Godot e a linguagem de script intuitiva, GDScript, tornam o processo eficiente e agradável.
Configurando o jogo Godot
Antes de mergulhar na criação do inimigo, configure a estrutura básica do seu jogo 2D em motor de jogo Godot.
Crie um novo projeto 2D no Godot. Na cena principal, crie um novo Corpo Cinemático2D nó e nomeá-lo Jogador. Dentro do nó do jogador, adicione um CollisionShape2D com forma de retângulo, que será a hitbox do jogador. Adicione também um sprite nó como uma representação visual do personagem do jogador.
O código usado neste artigo está disponível neste Repositório GitHub e é gratuito para você usar sob a licença do MIT.
Anexe o seguinte código GDScript ao Jogador nó para habilitar o movimento básico:
extends KinematicBody2D
const SPEED = 200
func _physics_process(delta):
var motion = Vector2.ZEROif Input.is_action_pressed("ui_right"):
motion.x += SPEEDif Input.is_action_pressed("ui_left"):
motion.x -= SPEEDif Input.is_action_pressed("ui_down"):
motion.y += SPEEDif Input.is_action_pressed("ui_up"):
motion.y -= SPEED
motion = move_and_slide(motion)
Com este código, o jogador pode se mover para a esquerda, direita, para cima e para baixo usando as teclas de seta ou as teclas WASD.
Criando um inimigo simples
Agora que você tem um personagem de jogador configurado, você pode criar um inimigo simples.
Crie uma nova cena e adicione um StaticBody2D nó nomeado Inimigo. Dentro do nó Inimigo, adicione um CollisionShape2D nó com uma forma de círculo para definir hitbox do inimigo. Adicione também um sprite nó para representar o inimigo visualmente.
Com a colisão configurada, o inimigo estará pronto para interagir com o jogador e outros elementos do seu mundo de jogo.
Fazendo um inimigo seguir o jogador
Criar inimigos que seguem o jogador adiciona um novo nível de desafio ao jogo.
Crie uma nova cena para o seguinte tipo de inimigo e adicione um Corpo Cinemático2D nó nomeado Siga o inimigo com um CollisionShape2D. Anexe o seguinte código GDScript ao nó FollowEnemy para fazê-lo seguir o player:
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)
Agora o Siga o inimigo se moverá em direção à posição do jogador em cada quadro.
Adicionando balas inimigas
Agora, você pode fazer o inimigo disparar balas em direção ao jogador. Crie uma nova cena e nomeie-a Bullet.tscn. Adicionar um Corpo Cinemático2D nó para a cena. Anexe o Bullet.gd script para o nó KinematicBody2D na cena Bullet.tscn. Adicione o seguinte código para definir a classe Bullet:
extends KinematicBody2D
const BULLET_SPEED = 300
var bullet_direction = Vector2.ZEROfunc _physics_process(delta):
var motion = bullet_direction * BULLET_SPEED * delta
move_and_collide(motion)
func set_direction(direction):
bullet_direction = direction.normalized()
Agora, crie um novo nó para o inimigo com balas e nomeie-o Tiro Inimigo. Dentro do nó ShootingEnemy, adicione um CollisionShape2D nó com uma forma de retângulo como hitbox.
Anexe o seguinte código GDScript ao nó ShootingEnemy para fazê-lo disparar balas:
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)
O inimigo agora dispara balas periodicamente na direção da posição do jogador. Use um condicional se declaração para verificar se o shoot_timer é menor que 0. Se for, atire na bala.
Inimigo em movimento aleatório
Além dos inimigos que seguem ou atiram no jogador, um inimigo que se move aleatoriamente pode injetar um elemento de imprevisibilidade e desafio em seu jogo. Criar um inimigo com padrões de movimento aleatórios requer uma combinação de lógica simples e geração de números aleatórios.
Comece criando uma nova cena e adicione um Corpo Cinemático2D nó nomeado RandomEnemy. Crie um novo script chamado RandomEnemy.gd e anexe-o ao nó RandomEnemy. O script lidará com a lógica de movimento aleatório.
extends KinematicBody2D
const MOVE_SPEED = 100
const MOVE_INTERVAL_MIN = 1.0
const MOVE_INTERVAL_MAX = 3.0var move_timer = 0.0
var move_interval = 0.0
var move_direction = Vector2.ZEROfunc _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 -= deltaif move_timer <= 0.0:
choose_new_direction()
var motion = move_direction * MOVE_SPEED * delta
move_and_collide(motion)
Incluindo Recursos Adicionais
Existem muitos recursos adicionais que você pode adicionar aos seus inimigos para tornar a jogabilidade mais interessante.
Batalhas contra chefes
As batalhas contra chefes servem como momentos climáticos em seu jogo, proporcionando encontros memoráveis e desafiadores que testam as habilidades e a perseverança dos jogadores. Os chefes inimigos são geralmente maiores e mais poderosos do que os inimigos normais, exigindo que os jogadores empreguem estratégias e táticas específicas para derrotá-los.
Geração Dinâmica de Inimigos
Implemente um sistema dinâmico de geração que ajusta os encontros inimigos com base no desempenho, localização ou eventos do jogo do jogador. Isso cria uma experiência de jogo mais responsiva e personalizada.
Adaptação Ambiental
Crie inimigos que podem se adaptar ao ambiente, como inimigos que podem voar, nadar ou escalar paredes. Essa versatilidade abre novas possibilidades de jogo e desafia os jogadores a navegar em diferentes terrenos.
Fraquezas e resistências do inimigo
Atribua fraquezas e resistências específicas aos inimigos, incentivando os jogadores a experimentar diferentes abordagens e táticas. Alguns inimigos podem ser vulneráveis a certos ataques ou elementos, enquanto outros são imunes ou resistentes.
Personalização do inimigo e variações de comportamento
Adicione um nível de imprevisibilidade dando aos inimigos variações aleatórias de comportamento. Por exemplo, um inimigo pode ter diferentes padrões de ataque ou velocidades de movimento em diferentes jogadas, mantendo a jogabilidade nova e rejogável.
Incluir uma variedade desses recursos adicionais pode enriquecer o design do inimigo do seu jogo, tornando cada encontro único e memorável para os jogadores.
Lembre-se de que, embora a introdução de novas mecânicas possa ser empolgante, é crucial manter o equilíbrio e a coerência no design geral do jogo.
Melhores práticas para criar inimigos
Ao criar inimigos em seu jogo Godot, considere as seguintes práticas recomendadas:
Comunicação Visual Clara
Use designs de inimigos distintos que se destacam do ambiente para tornar os inimigos facilmente reconhecíveis.
Considere o uso de códigos de cores ou silhuetas exclusivas para diferenciar os tipos de inimigos. Certifique-se de que as animações e os efeitos visuais do inimigo reforcem seus comportamentos e ataques.
Dificuldade de Equilíbrio
Introduza gradualmente inimigos com complexidade crescente à medida que o jogador avança no jogo. Teste encontros inimigos com jogadores de vários níveis de habilidade para garantir que os desafios sejam adequados para todos os jogadores. Evite picos repentinos de dificuldade que podem frustrar os jogadores.
Evitando golpes baratos
Projete inimigos com ataques que o jogador pode desviar ou bloquear, dando a eles a chance de reagir. Use um hitbox justo para os ataques dos inimigos, evitando ataques que atingem além de sua representação visual. Use sinais de alerta ou dicas para sugerir ataques perigosos.
Playtesting e Iteração
Teste regularmente os encontros inimigos durante o desenvolvimento para avaliar seu fator de diversão e dificuldade. Reúna o feedback dos jogadores e use-o para ajustar os comportamentos, pontos fortes e fracos do inimigo.
Efeitos sonoros
Os efeitos sonoros desempenham um papel crucial na criação de um ambiente de jogo envolvente e cativante. Quando um inimigo for atingido, adicione efeitos sonoros sem direitos autorais para reforçar a sensação de impacto e engajamento em combate.
Seu jogo pode acompanhar cada golpe ou golpe com pistas de áudio distintas que correspondem ao tipo de ataque e às características do inimigo.
Tornando os jogos Godot mais envolventes com os inimigos
Os inimigos são um componente fundamental de muitos jogos, oferecendo desafios, obstáculos e uma sensação de dever cumprido quando derrotados. Ao adicionar diferentes tipos de inimigos com comportamentos variados, pontos de saúde e mecânica de tiro, você pode criar experiências de jogo diversificadas e envolventes para os jogadores.
Lembre-se de equilibrar a dificuldade, oferecer feedback visual e auditivo e testar seus inimigos minuciosamente para fornecer aos jogadores uma experiência de jogo agradável e gratificante.