J'ai un jeu de type coureur infini 2d dont le fond change constamment ses couleurs. Pendant ce temps, la couleur des plates-formes reste la même. De cette façon, les plates-formes à un moment donné (lorsque leur couleur est la même que celle de l'arrière-plan) deviennent "invisibles" pour le joueur.
Comment puis-je éviter de façon créative, rapide et pratique ce problème d'unité?
PS J'ai essayé d'y ajouter un matériau brillant, mais cela n'a pas fonctionné .
Comme il s'agit d'un coureur infini, je suppose que vos couleurs d'arrière-plan sont générées de manière procédurale. Je ne suis pas sûr de votre algorithme, mais prenez cette sortie de couleur et limitez sa plage.
Vous pouvez simplement exclure la ou les couleurs de votre plateforme en tant qu'option de couleur d'arrière-plan possible (mais l'arrière-plan peut être un tout petit peu différent et difficile à différencier). Par exemple: IF backColor = platformColor THEN GetNextBackgroundColor (). Vous pouvez également créer une fonction 'IsColorSimilar (color1, color2)', mais plus difficile.
Utilisez une liste de couleurs d'arrière-plan valides connues et parcourez-les.
Avoir des «styles» de couleurs différents pour les deux. Votre plate-forme pourrait être lumineuse et gaie, et limiter vos couleurs d'arrière-plan à des couleurs désaturées. Vous devez vous éloigner de la façon traditionnelle RBG de représenter les couleurs et passer à un modèle tel que HSL.
ColorTools est un excellent complément Unity pour travailler avec les couleurs. Cela coûte 10 $, mais ça vaut le coup. https://www.assetstore.unity3d.com/en/#!/content/21966
Il a des méthodes pour générer des couleurs pour ce que vous recherchez, telles que Desaturate () pour désaturer la couleur d'arrière-plan générée et IsSimilar () pour vérifier si les deux couleurs sont trop proches l'une de l'autre.
Vous pouvez trouver d'autres fonctionnalités similaires gratuitement dans d'autres bibliothèques sur le net avec un peu de recherche.
la source