Je suis actuellement confronté au même problème, et ma solution est exactement ce que DuckMaestro et Raven Dreamer ont suggéré - Avoir un script qui crée 4 objets enfants au moment de l'exécution, chacun représentant un côté de la bordure et attacher des rendus de ligne à chacun.
Dans mon cas, je devais constamment redimensionner la bordure pour la garder autour de mon objet (un maillage de texte [qui utilise un rendu de maillage] pour un champ de texte personnalisé), donc à chaque mise à jour, je faisais ceci:
float width = Mathf.Max(renderer.bounds.size.x + paddingX * 2, minWidth);
float x = renderer.bounds.center.x - width / 2;
float height = renderer.bounds.size.y + paddingY * 2;
float y = renderer.bounds.center.y - height / 2;
AlterBorder(0, new Vector3(x - thickness / 2, y, 0), new Vector3(x + width + thickness / 2, y, 0)); //Bottom edge going left to right
AlterBorder(1, new Vector3(x + width, y + thickness / 2, 0), new Vector3(x + width, y + height - thickness / 2, 0)); //Right edge going bottom to top
AlterBorder(2, new Vector3(x + width + thickness / 2, y + height, 0), new Vector3(x - thickness / 2, y + height, 0)); //Top edge going right to left
AlterBorder(3, new Vector3(x, y + height - thickness / 2, 0), new Vector3(x, y + thickness / 2, 0)); //Left edge going top to bottom
AlterBorder()
accède simplement au rendu de ligne approprié (spécifié par le premier paramètre) et définit respectivement son début et sa fin sur le premier et le deuxième vecteur.
Notez que j'ai utilisé renderer
comme référence pour la taille, mais vous pouvez évidemment utiliser n'importe quel rectangle, tant que x, y est le coin supérieur gauche.
D'après ce que je peux dire, cela fonctionne très bien, a fière allure dans le jeu car je peux facilement déplacer mon objet bordé dans les 3 axes (même le faire pivoter, et puisque les rendus de ligne font toujours face à la caméra, cela n'a pas l'air bizarre), et est pas difficile à mettre en œuvre.