Herbes hautes Unity2D


8

J'utilise Unity pour créer un jeu descendant 2D. Jusqu'à présent, tout s'est bien passé, mais j'ai rencontré un problème que je n'arrive pas à résoudre correctement.

Je veux implémenter des "zones d'herbes hautes" où une partie du personnage sera occluse.

Un exemple visuel:

J'ai pensé à faire de l'herbe haute par couches, mais cela créerait BEAUCOUP d'objets de jeu, et la transition à mesure que le personnage se déplace vers le haut ne sera pas assez fluide.

Une idée de comment pourrais-je aborder cela? Je pensais que peut-être en utilisant des shaders je pourrais réaliser quelque chose comme ça, mais mes connaissances sur les shaders sont très très limitées, donc je ne sais même pas si une telle chose est possible.


6
Parfois, vous devez travailler avec BEAUCOUP d'objets de jeu, vous savez.

Une sorte de piratage pour éviter plus d'objets de jeu serait de remplacer le sprite du joueur par une version personnalisée "isInGrass" du sprite (exemple très grossier ici ) alors qu'il est dans l'herbe et le dessiner simplement sur le dessus. Avec un bel art et un peu de transparence en bas (pour l'aider à se fondre dans l'herbe réelle), il pourrait sembler assez bon.
Christian

J'ai pensé à cette approche mais, en plus de tout le travail qui nécessiterait (nous aurions besoin d'au moins deux animations pour chaque acteur au moins), la transition de l'extérieur de l'herbe à l'intérieur du scénario latéral (dans l'image d'exemple: rangée du haut , troisième colonne), lorsque la moitié du corps est à l'intérieur et que l'autre moitié est à l'extérieur, le résultat serait assez compliqué.
Leo

2
On dirait un masque ou un pochoir, c'est ce dont vous avez besoin. Ce fil contient des informations utiles. Cette extension montre de quoi je parle, mais je ne sais pas si elle fera exactement ce dont vous avez besoin.

1
Cela ressemble à peu près à ce que je cherchais! Je vais devoir faire des recherches et l'expérimenter. Si je parviens à faire fonctionner quelque chose, je le posterai comme réponse.
Leo

Réponses:


1

Je suis d'accord avec @Christian (même si je n'appellerais pas cela un hack). Détectez la condition lorsque l'objet doit être différent, puis dessinez-le simplement différemment. Chaque élément du jeu ne doit pas nécessairement être un "modèle" de son fonctionnement dans la "nature". C'est une erreur que j'ai commise à plusieurs reprises et c'est donc devenu quelque chose d'un mantra pour moi. Demandez-vous ceci: qu'est-ce que vous gagneriez à avoir le buisson occlus le joueur "de manière réaliste" au lieu de simplement dessiner le joueur de la façon dont il devrait ressembler? Je mets cela entre guillemets, car en essayant d'imaginer à quoi cela ressemblerait, je pense que l'approche d'occlusion en couches peut effectivement sembler inférieure.

Si votre préoccupation avec l'approche de @ Christian consiste à gérer la liste "potentiellement illimitée" des petites choses que vous devez vérifier chaque image, c'est une autre erreur que j'ai commise à plusieurs reprises. Je vous recommande de "simplement y aller" pour l'instant et de vérifier périodiquement combien de temps la liste est réellement devenue - et si elle est réellement devenue un problème . Une ou deux choses se produiront. Soit cela n'est pas devenu un problème, auquel cas - pourquoi essayez-vous de le résoudre? Ou c'est le cas et vous devez concevoir une solution (minimale) pour la résoudre. N'essayez pas de le résoudre en le simulant .


0

J'ai enfin trouvé une solution satisfaisante! Le commentaire de @Thebluefish m'a montré la bonne direction avec des masques.

L'idée est d'utiliser un shader qui dessine le personnage en deux passes:

  • Dans la première passe, le personnage est rendu normalement, MAIS étant complètement derrière les buissons.
  • Dans la deuxième passe, je le dessine à nouveau, en utilisant un masque qui olny dessine la partie supérieure du personnage, au-dessus des buissons.

Cela se fait même lorsque le chatacter n'est pas à l'intérieur des buissons. De cette façon, je n'ai pas à détecter les collisions contre les buissons, et cela facilite également la transition à l'intérieur de la brousse dans les cas limites comme celui-ci:

La moitié du personnage qui est en dehors de la brousse est rendue lors de la première passe. L'autre moitié sera complètement obstruée par la brousse.

Dans la deuxième passe, le caractère masqué sera à nouveau rendu. La partie à l'extérieur de la brousse restera la même, mais la partie à l'intérieur de la brousse sera rendue au-dessus avec le masque au-dessus de la brousse, ce qui lui donnera l'apparence de l'intérieur de la brousse.


-1

Vous pouvez détecter si le personnage est dans l'herbe ou non. Dessinez ensuite uniquement la moitié supérieure du caractère.


Je pense que cette réponse a déjà été suggérée. Avez-vous des détails supplémentaires à ajouter à votre réponse?
MichaelHouse
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.