Attualmente sto affrontando lo stesso problema, e la mia soluzione è esattamente ciò che DuckMaestro e Raven Dreamer hanno suggerito: avere uno script che crei 4 oggetti figlio in fase di esecuzione ciascuno dei quali rappresenta un lato del bordo e allega i renderizzatori di linee a ciascuno.
Nel mio caso avevo bisogno di ridimensionare costantemente il bordo per tenerlo attorno al mio oggetto (una mesh di testo [che utilizza un renderer di mesh] per un campo di testo personalizzato), quindi ad ogni aggiornamento ho fatto questo:
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()
accede semplicemente al renderer di riga appropriato (specificato dal primo parametro) e imposta rispettivamente l'inizio e la fine del primo e del secondo vettore.
Nota che ho usato renderer
come riferimento per le dimensioni, ma ovviamente puoi usare qualsiasi rettangolo, purché x, y sia l'angolo in alto a sinistra.
Da quello che posso dire questo funziona davvero bene, sembra fantastico nel gioco perché posso facilmente spostare il mio oggetto bordato in giro in tutti e 3 gli assi (anche ruotarlo, e poiché i renderizzatori di linee sono sempre rivolti verso la telecamera non sembra strano), ed è non è difficile da implementare.