Obecnie mam do czynienia z tym samym problemem, a moje rozwiązanie jest dokładnie tym, co sugerują DuckMaestro i Raven Dreamer - Mają skrypt, który tworzy w czasie wykonywania 4 obiekty potomne, z których każdy reprezentuje bok granicy i dołącza do każdego z nich renderery linii.
W moim przypadku musiałem ciągle zmieniać rozmiar ramki, aby utrzymać ją wokół mojego obiektu (siatka tekstowa [która korzysta z renderera siatki] dla niestandardowego pola tekstowego), więc przy każdej aktualizacji robiłem to:
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()
po prostu uzyskuje dostęp do odpowiedniego mechanizmu renderującego linie (określonego przez pierwszy parametr) i ustawia odpowiednio jego początek i koniec na pierwszy i drugi wektor.
Zauważ, że użyłem renderer
jako odniesienia dla rozmiaru, ale oczywiście możesz użyć dowolnego prostokąta, o ile x, y jest lewym górnym rogiem.
Z tego, co mogę powiedzieć, działa to naprawdę dobrze, wygląda świetnie w grze, ponieważ mogę z łatwością przesuwać graniczy obiekt we wszystkich 3 osiach (nawet go obracać, a ponieważ renderery linii zawsze są skierowane w stronę kamery, nie wygląda to dziwnie) i jest nie trudne do wdrożenia.