Ich stehe derzeit vor dem gleichen Problem, und meine Lösung ist genau das, was DuckMaestro und Raven Dreamer vorgeschlagen haben - Erstellen Sie ein Skript, das zur Laufzeit 4 untergeordnete Objekte erstellt, von denen jedes eine Seite des Rahmens darstellt, und fügen Sie jedem einen Linienrenderer hinzu.
In meinem Fall musste ich die Größe des Rahmens ständig ändern, um ihn um mein Objekt (ein Textnetz [das einen Mesh-Renderer verwendet] für ein benutzerdefiniertes Textfeld) zu erhalten. Bei jedem Update habe ich Folgendes ausgeführt:
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()
greift einfach auf den entsprechenden Linienrenderer zu (angegeben durch den ersten Parameter) und setzt dessen Anfang und Ende auf den ersten bzw. zweiten Vektor.
Beachten Sie, dass ich renderer
als Referenz für die Größe verwendet habe, aber Sie können natürlich jedes Rechteck verwenden, solange x, y die obere linke Ecke ist.
Soweit ich weiß, funktioniert dies sehr gut, sieht im Spiel großartig aus, da ich mein umrandetes Objekt leicht in allen drei Achsen bewegen kann (sogar drehen und da Linienrenderer immer zur Kamera zeigen, sieht es nicht sonderbar aus) und ist es auch nicht schwer zu implementieren.