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.
Réponses:
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 .
la source
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:
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.
la source
Vous pouvez détecter si le personnage est dans l'herbe ou non. Dessinez ensuite uniquement la moitié supérieure du caractère.
la source