Dans mon dernier jeu que je crée, vous pouvez découper un objet 2D de manière arbitraire, comme le montre ce gif:
Vous pouvez continuellement le couper en centaines ou milliers de pièces. Cela ne crée pas beaucoup de retard, car ils sont toujours dans un état physique en sommeil, mais il y a un problème lorsque vous les faites bouger.
Je ne sais pas trop comment le faire pour qu'il n'y ait pas tant de décombres à couper en morceaux. Je ne veux pas vraiment les supprimer après un certain temps; Je n'aime pas comment, si vous revenez à quelque chose que vous avez coupé après un moment, cela a disparu au hasard.
Comment puis-je nettoyer les décombres créés par un joueur?
unity
2d
performance
Ducktor
la source
la source
Réponses:
Tout d’abord, cette mécanique de jeu a l’air d’être très amusante, alors félicitons-nous d’y penser! Voici deux solutions simples pouvant être utilisées indépendamment ou ensemble pour résoudre ce problème particulier:
Enlevez les très petits morceaux
Il ne sert à rien de garder le contact avec de minuscules morceaux de collision qui ne gêneront pas vraiment le joueur ou n'auront aucun effet réel sur l'environnement. Calculer la logique de collision supplémentaire ne vaut tout simplement pas la peine. Supprimez-les ou supprimez-les.
Limiter le nombre de joueurs
Avoir des coupes illimitées pourrait rendre beaucoup de vos casse-têtes très simples si vous pouviez couper chaque objet gênant en un tas de bouillie. Ne donnez au joueur que quelques coupes (ou laissez-le se recharger lentement au fil du temps) et vous constaterez probablement que cela complique encore plus vos énigmes et vous évite d'avoir à gérer des milliers de fragments.
la source
Déterminez votre goulot d'étranglement
Quelques centaines d'objets en mouvement ne devraient pas être un problème. Cependant, quelques centaines d'objets en collision pourraient être. Il faudra quelques essais, mais je crois que le goulot d'étranglement que vous avez est la collision.
À propos, de combien d'objets parlons-nous? Quelle est la plateforme? Cent objets pour un jeu mobile ne sont pas les mêmes que cent pour un jeu Web ou cent objets pour un jeu de bureau.
Testez le même jeu, mais en désactivant les collisions entre les objets coupés, et voyez si vous êtes en retard sur des quantités similaires d'objets. Si tel est le cas, cela signifie que la quantité d'objets est la cause du problème; sinon, les collisions sont le problème.
Cela éclairera votre décision sur ce que vous ferez pour améliorer les performances. Toutes les idées ci-dessous ne s'appliqueront pas, et vous aurez quand même besoin de tests.
Je ne parlerai pas d'optimisation pour un grand nombre d'objets éloignés du lecteur, car le problème semble venir lors de l'interaction avec les objets.
Si le problème survient lors de l'interaction avec les objets, il est difficile de savoir comment le supprimer des objets non visibles va le résoudre ... mais je suppose que cela pourrait aider.
Je dirais simplement que si les objets éloignés du joueur posent un problème, vous pouvez commencer par avoir des niveaux plus petits, ou envisager de diviser le jeu en morceaux que vous pouvez charger et décharger en fonction de la direction du joueur.
Hors limites
Je crois que lorsqu'il s'agit de nettoyer les décombres, la première chose à faire est de supprimer les objets hors limites. Par exemple, la pièce qui est tombée dans une fosse. S'il n'y a aucun moyen que le joueur puisse y aller pour le voir, il n'y a aucune raison de le garder.
J'y reviendrai.
Rendez-le plus réaliste (partie 1)
Lorsque vous coupez du bois avec une scie, une hache ou un outil similaire, vous perdez du matériel (sciure de bois, copeaux, etc.). Même si vous coupez au laser, le laser brûlera du bois. De plus, pour les choses qui ne sont pas du bois, il y aura généralement des déformations autour de la coupe, des éboulements, etc.
Ce que je dis, c'est que la coupe n'est pas parfaite et que certains matériaux seront perdus. Vous pouvez modéliser cela dans votre jeu. Ce truc magique qui coupe le rouge a de l’épaisseur. Supprimez cette épaisseur des objets (ajoutez des effets de particules si vous vous sentez trop coupable).
Cela signifie que vous ne pourrez pas couper quoi que ce soit plus petit que cette épaisseur. En fait, tenter de le faire l'enlèvera du jeu. Ça c'est bon! Cela signifie qu'il y a une limite supérieure à la quantité de décombres qu'il y aura, et qu'il existe un moyen mécanique de le nettoyer en jeu.
Changer de vitesse pour les petits objets
Cela fonctionnera mieux si les collisions sont le problème.
Lorsqu'un objet est trop petit, les détails de ses différents angles sont moins pertinents. Vous pourriez changer pour un mécanicien de collision moins précis. Par exemple, vous pouvez utiliser des collisionneurs de cercle.
Vous pouvez traiter des objets même plus petits sans se heurter; Ne considérez que la collision entre eux et les objets de l'agent (tels que l'avatar du joueur ou les personnages contrôlés par l'IA).
Enfin, de très petits objets pourraient simplement se transformer en poussière (effets de particules).
Rendez-le plus réaliste (partie 2)
Cela fonctionnera mieux si les collisions sont le problème.
Le matériau se déforme et se casse sous la pression. Si vous vous retrouvez avec de longs objets très peu épais, décomposez-les en objets plus petits afin qu'ils puissent tirer parti de la solution ci-dessus.
On peut prétendre qu'il avait une épaisseur trop faible pour s'effriter et se briser lorsque vous le frappez.
Fusionner des objets
Cela fonctionnera mieux si le nombre d’objets pose problème.
Une astuce courante utilisée par de nombreux jeux pour traiter de grandes quantités de chutes pouvant nuire aux performances consiste à regrouper les chutes.
Vous pouvez essayer quelque chose de similaire pour les petits objets proches les uns des autres. Faites-les devenir un seul objet. Cependant, je ne veux pas coller les morceaux ensemble. Je veux créer un seul objet pour gérer leur physique; vous pouvez toujours représenter les pièces individuelles qui composent l'objet, en utilisant éventuellement des techniques apparentées aux effets de particules.
Rendez-le plus réaliste (partie 3)
Avez-vous entendu parler du vent? Il y a du vent dans le monde réel.
Utilisez le vent pour repousser les petits objets.
Je sais que cela peut paraître contre-intuitif, car cela signifie que les petits objets ne doivent pas se reposer, du moins pas tout de suite. Lisez ci-dessous avant de faire votre jugement.
Vous pouvez utiliser le vent pour repousser un petit objet avant - ou dès que - ils commencent à s'empiler. Ce qui fonctionnera mieux si vous utilisez des optimisations pour de petits objets (par exemple, en les combinant ou en supprimant les collisions).
De plus, si vous pouvez utiliser le vent pour pousser des objets dans des fosses ou hors des limites, vous pouvez vous en servir d'excuse pour retirer les objets. Je vous ai dit que j'allais y revenir. Même si vous ne le faites pas, cela peut servir d'excuse pour retirer de petits objets trop éloignés du joueur. Imaginez que le vent les ait éliminés alors que le joueur ne regardait pas.
Vous pouvez supprimer des objets lorsque le joueur ne regarde pas, vous avez ma bénédiction.
En plus de cela, vous avez maintenant une excuse pour ajouter du vent, que vous pouvez ajouter du vent dans le cadre d'autres mécanismes ou obstacles du jeu. Vous pouvez même ajouter au récit l’esprit du vent qui essaie de garder les choses propres, si vous en avez l’intention.
Remarque : vous n'avez pas nécessairement à déclencher le vent quand il faut nettoyer les gravats (bien que cela fonctionnerait), vous pouvez probablement avoir du vent se produire à des intervalles aléatoires.
Castors!
Un castor agaçant vient voler ton bois!
Maintenant vous avez un type d'ennemi!
En plus, bien sûr, ils enlèvent du bois pendant que vous ne cherchiez pas. Vous pouvez même le concevoir pour que vous puissiez voir un castor s'enfuir avec un morceau de bois qui était autrefois un tas. Cela ferait un moment mémorable, expliquera pourquoi le bois a disparu et résoudra tous les problèmes de performances auxquels vous êtes confrontés, tout à la fois.
C'est tous les compromis
Il existe des limitations de la plate-forme ou des outils que vous avez choisis. Même le temps et le budget dont vous disposez pour développer le jeu sont une limitation. Vous ne pouvez pas faire une simulation parfaite de la réalité, encore . Personne ne peut .
Tous les développeurs travaillent dans les limites imposées par leur plate-forme cible et les outils qu’ils possédaient à l’époque. Les meilleurs jeux devaient faire des compromis pour rendre le jeu amusant et attrayant… même si cela signifiait moins de réalisme, en fait, souvent, ils sont amusants et attrayants, car ils ne sont pas réalistes.
Laissez la créativité venir de ces limitations.
Bien que vous puissiez également rendre votre jeu plus réaliste , en choisissant les éléments de la réalité qui conviennent à votre développement. Considérez que la suppression d’objets éloignés du joueur fait partie du coût de la réalisation d’un jeu amusant.
la source
Le monde est discret. Vous ne pouvez pas rendre un objet plus petit qu'un pixel, ne laissez donc pas de tels objets exister. (Ceci est similaire à certains points de réalisme faits par Theraot .)
En effet, vous pouvez l’obtenir gratuitement: le joueur spécifie sa ligne de coupe comme une ligne discrétisée à l’écran. La coupe a pour effet de diviser chaque objet en sous-objets constitués, respectivement, des pixels situés sur ou au-dessous de cette ligne, et des pixels strictement situés au-dessus de celle-ci. Un objet d'un pixel ne peut pas être à la fois au-dessus et au-dessous de la ligne, il ne peut donc pas être coupé par cet algorithme.
Si le fait de couper toutes les tables de coupe en pixels individuels vous laisse toujours trop d’objets à suivre, une taille minimale plus grande peut tout de même fonctionner.
Ou ne t'inquiète pas pour ça. Si le joueur est prêt à passer beaucoup de temps à couper des objets en poussière, il n'est évidemment pas pressé pour pouvoir gérer le retard qu'il a causé. ;-)
la source