Melhor resposta
Para um jogo de plataforma 2D (lado a lado), a maneira mais simples de pensar como fazer isso faria com que os jogadores se transformassem e o Sprite Renderer invertesse dessa forma e a velocidade do Translate também. Realmente não há pathfinding em um jogo de plataforma para um inimigo. Um exemplo seria algo como:
[SerializeField] Transform player;
[SerializeField] SpriteRenderer rend;
[SerializeField] float speed;
void Update()
{
if(player.pos.x < transform.position.x)
{
renderer.flipX = true;
transform.Translate(new Vector2(-speed, 0f));
}
else
{
renderer.flipX = false;
transform.Translate(new Vector2(speed, 0f));
}
Resposta
Um dos projetos em que eu estava trabalhando quando tinha tempo (= entre empregos: d) era um muito clássico, antigo nível baixo 2d motor de jogo baseado em sprite, adequado para plataformas e similares. Só porque.
É realmente uma coisa muito divertida de resolver, escrever seu próprio motor 2d, é pequeno o suficiente para que você possa fazê-lo trabalhe sozinho dentro de alguns meses antes de mais de anos, então não é como um grande motor 3D onde é um projeto torta no céu onde você nunca consegue fazer um jogo com ele. Ainda é bastante razoável, embora um pouco anacrônico, lançar seu próprio mecanismo 2d.
Principalmente meu mecanismo de jogo (escrito em C ++, em cima do Win32 simples) consistia em: - classe de gráficos (uma tela de baixo nível onde você pode desenhar linhas, polígonos ou pixels brutos) - classe sprite, para desenhar animações e sprites combinando peças de uma imagem, bem como desenhar texto em bitmap - classe tileset, para gerenciar fundos de tileset - uma hierarquia de classes de IU com componentes simples ( botões, painéis, caixa de listagem, etc.) - um motor de física simples (nada sofisticado, apenas algo que permite mover objetos com alguma velocidade e acionar a colisão com outros objetos e o cenário) - uma classe de som simples - o jogo principal máquina de estado de loop / jogo que amarrou tudo isso, enviou mensagens de mouse e teclado, enviou eventos para os objetos de IU, renderizou todos os sprites, atualizou todos os objetos de física, etc. é basicamente o "coração" do jogos. Se você quiser entender como os jogos básicos (e implicitamente os motores de jogo) funcionam, concentre-se nesta área, gerenciando o estado do jogo, os eventos do jogo e o loop principal de atualização / desenho. - o código de desenho Win32 dependente da plataforma em apenas um pequeno arquivo
Eu também escrevi alguns conversores de arquivo, um editor de tileset e um editor de animação usando .NET / C ++ / CLI para acompanhá-los. Na verdade, a maior parte do trabalho consistia em escrever as aulas de sprite e física, bem como o editor de sprites.