Animação e movimento da subida da borda (plataforma 2D)

11

Esforçando-se para tomar uma decisão sobre a implementação de uma mecânica de subida de borda para um jogo de plataformas 2D impulsionado pela física. Qual é a melhor maneira de fazer isso sem ficar muito complexo?

Até agora eu entendo (hobby aqui não é um profissional), existem algumas opções, incluindo:

  1. Aplique força controlada ao corpo rígido no eixo y até que a posição da raiz esteja logo acima da posição da mão e aplique força suficiente no eixo x, de modo que o personagem esteja na plataforma. Ao mesmo tempo, sincronize isso com as animações de escalada.

    Observações : o movimento é fácil aqui e pode até ser controlado por uma junta deslizante prismática, mas não tenho certeza de como manteria as animações (coluna) sincronizadas com o movimento.

  2. Animação de movimento raiz que direciona a posição raiz do personagem. Teleporte o corpo rígido quando completo e espere que o box2d ainda possa responder adequadamente a tempo de qualquer colisão, se algum objeto cair do céu.

    Observações : parece mais fácil animar, mas não tenho certeza se vou ter algum problema com o tempo de execução da coluna, box2d ou mais tarde na linha de plataformas móveis e plataformas de altura variadas.

  3. Aplique a restrição IK programaticamente nas mãos para travá-las no lugar e continue girando os ossos manualmente ou aplique pequenas animações predefinidas (poucas teclas / quadros) enquanto aplica a força necessária ao corpo rígido ao mesmo tempo.

    Observações : parece que isso daria o máximo controle ao jogador, mas parece muito complicado para mim implementar no meu nível, não exatamente certo por onde começar.

Agradecemos antecipadamente por qualquer entrada!

FYI: Este é um mecanismo baseado em ECS (libgdx + ashley) com box2d. A captura de borda já está implementada como um sistema separado, para que possamos assumir aqui que o personagem já é capaz de pendurar em uma borda de qualquer altura.

Adrian
fonte

Respostas:

1

Eu acredito que você precisa de mais opções de design aqui antes de poder tomar uma decisão apropriada, especificamente, o que pode acontecer com o personagem enquanto ele está pendurado / escalando?

desde que você disse que o jogo é baseado na física, suponho que você possa ter uma pedra caindo sobre sua cabeça enquanto estiver pendurada ou subindo, por isso, se esse for o caso, acredito que usar o rootmotion pode ser a solução mais simples, basta animar a escalada , enquanto está subindo, está em um estado de suspensão ligeiramente diferente, a única diferença é que você não pode iniciar a ação de subida.

Agora, isso pressupõe que você tenha toda a situação pendurada sob controle, o que significa que, enquanto você está pendurado e qualquer interação acontece, o personagem reage adequadamente.

Então tudo o que você precisa fazer é definir o estado do seu personagem de volta ao modo inativo assim que a animação de escalada estiver concluída.

Brian H.
fonte
0

você pode simplesmente mover a transformação. até um número n de vezes até que os pés estejam no parapeito e esquecer a física temporariamente; acho que funcionará bem; você sempre pode medir a distância entre objetos em queda e o jogador, caso a colisão falhe durante uma tradução de transformação. para garantir que uma colisão ocorra ..

joe shmoe
fonte
0

Se o jogador for pressionado contra um objeto escalável, deixe-o mover para cima / para baixo no eixo Y. Durante esse estado, verifique se ele não pode se mover no eixo X. À medida que você se move, você pode chamar Animation.Sample em sua animação de escalada para garantir que o ponto na animação corresponda à distância percorrida em vez de tentar cronometrar tudo.

Peter Morris
fonte
0

Na minha opinião, a "melhor" maneira seria: Quando você detectar que é possível escalar, bloqueie temporariamente a posição do jogador. Use a animação com movimento raiz e bloqueie os controles. Quando a animação terminar, desbloqueie a posição e os controles dos jogadores.

É claro que se você fizer isso de forma imprudente, parecerá estranho OU exigirá precisão perfeita em pixels. Mas você pode evitá-lo - ofereça ao jogador um intervalo onde ele possa subir e, com um lerp, ajuste rapidamente a posição para o local perfeito.

lilKriT
fonte
0

O jogador pode mover-se livremente na horizontal enquanto estiver no ar (controle aéreo)? Nesse caso, eu simplesmente aplicaria uma quantidade apropriada de força vertical para colocar os pés do jogador acima da plataforma e permitir que o jogador se movesse horizontalmente sobre ela.

Isso daria ao jogador mais controle sobre o personagem e abriria mais opções de movimento - por exemplo, se o jogador (enquanto pendurado em uma borda) quisesse pular, atire em algo na plataforma, depois caia novamente e pegue novamente o borda enquanto o projétil viajava para o alvo, a fim de evitar qualquer projétil que o alvo disparasse de volta ao jogador. Essa tática pode contribuir para uma estratégia interessante de luta contra chefes.

Agente Tatsu
fonte