Animation et mouvement de montée de rebord (plateforme 2D)

11

Luttant pour prendre une décision sur la mise en œuvre d'un mécanicien de montée de rebord pour un jeu de plateforme 2D piloté par la physique. Quelle est la meilleure façon de procéder sans que cela ne devienne trop complexe?

Jusqu'à présent, je comprends (amateur ici pas un pro) il y a quelques options, y compris:

  1. Appliquez une force contrôlée au corps rigide sur l'axe y jusqu'à ce que la position de la racine soit juste au-dessus de la position de la main, puis appliquez suffisamment de force sur l'axe x pour que le personnage se tienne sur la plate-forme. En même temps, synchronisez cela avec les animations de montée.

    Remarques : le mouvement est facile ici et peut même être contrôlé par une articulation coulissante prismatique mais je ne sais pas comment je garderais les animations (colonne vertébrale) synchronisées avec le mouvement.

  2. Animation de mouvement racine qui détermine la position racine du personnage. Téléportez le corps rigide une fois terminé et espérez que box2d pourra toujours répondre correctement à temps à toute collision si des objets tombaient du ciel.

    Remarques : semble plus facile à animer, mais je ne sais pas si je rencontrerai des problèmes avec la colonne vertébrale d'exécution, box2d ou plus tard sur les plates-formes mobiles et les plates-formes de hauteur variable.

  3. Appliquez la contrainte CI par programmation sur les mains pour les verrouiller en place et procédez à la rotation manuelle des os ou appliquez de petites animations prédéfinies (quelques clés / images) tout en appliquant la force nécessaire au corps rigide en même temps.

    Remarques : semble que cela donnerait un contrôle maximum au joueur mais cela semble trop compliqué pour moi de l'implémenter à mon niveau, je ne sais pas exactement par où commencer.

Merci d'avance pour toute contribution!

FYI: Ceci est un moteur basé sur ECS (libgdx + ashley) avec box2d. Le grab de rebord est déjà implémenté comme un système séparé, nous pouvons donc supposer ici que le personnage est déjà capable de se suspendre à un rebord de n'importe quelle hauteur.

Adrian
la source

Réponses:

1

Je crois que vous avez besoin de plus de choix de conception ici avant de pouvoir faire une bonne décision, en particulier, que peut-il arriver au personnage pendant qu'il pend / grimpe?

puisque vous avez dit que le jeu est basé sur la physique, je suppose que vous pourriez avoir un rocher qui tombe sur la tête pendant la suspension ou l'escalade, donc si c'est le cas, je crois que le recours à la rootmotion pourrait être la solution la plus simple, il vous suffit d'animer l'escalade , alors qu'il grimpe, il se trouve dans un état de suspension légèrement différent, la seule différence étant que vous ne pouvez pas lancer l'action d'escalade.

Maintenant, cela suppose que vous avez la totalité de la situation de suspension sous contrôle, ce qui signifie que si pendant que vous suspendez et que toute interaction se produit, le personnage réagit correctement.

Ensuite, tout ce que vous devez faire est de remettre l'état de votre personnage au ralenti une fois l'animation d'escalade terminée.

Brian H.
la source
0

vous pouvez simplement déplacer le transform.y vers le haut n nombre de fois jusqu'à ce que les pieds soient sur le rebord et oublier temporairement la physique, je pense que cela fonctionnera bien, vous pouvez toujours mesurer la distance entre les objets qui tombent et le joueur en cas d'échec de la collision pendant une traduction de transformation. pour vous assurer qu'une collision se produit ..

joe shmoe
la source
0

Si le joueur est pressé contre un objet grimpable, laissez-le monter / descendre pour le déplacer sur l'axe Y. Pendant cet état, assurez-vous qu'il ne peut pas se déplacer sur l'axe X. Pendant que vous vous déplacez, vous pouvez appeler Animation.Sample sur votre animation de montée pour vous assurer que le point dans l'animation correspond à la distance parcourue plutôt que d'essayer de tout chronométrer.

Peter Morris
la source
0

À mon avis, la "meilleure" façon serait de: Lorsque vous détectez que l'escalade est possible, verrouillez temporairement la position du joueur. Utilisez l'animation avec le mouvement racine et verrouillez les commandes. Une fois l'animation terminée, déverrouillez la position et les commandes du joueur.

Bien sûr, si vous le faites imprudemment, cela aura l'air bizarre OU cela nécessitera une précision parfaite des pixels. Mais vous pouvez l'éviter - donnez au joueur une certaine distance où il peut grimper, et avec un lerp ajustez rapidement la position à l'endroit parfait.

lilKriT
la source
0

Le joueur peut-il se déplacer librement horizontalement lorsqu'il est en l'air (contrôle aérien)? Si c'est le cas, j'appliquerais simplement une quantité appropriée de force verticale pour placer les pieds du joueur au-dessus de la plate-forme et laisser le joueur se déplacer horizontalement dessus.

Cela donnerait au joueur plus de contrôle sur le personnage et ouvrirait plus d'options de mouvement - Par exemple, si le joueur (tout en étant suspendu à un rebord) voulait sauter, tirer sur quelque chose sur la plate-forme, puis retomber et saisir à nouveau le rebord pendant que le projectile se dirigeait vers sa cible afin d'esquiver tout projectile que la cible a renvoyé sur le joueur. Une telle tactique pourrait constituer une stratégie de combat de boss intéressante.

Agent Tatsu
la source