В настоящее время я сталкиваюсь с той же проблемой, и мое решение - именно то, что предложили DuckMaestro и Raven Dreamer: иметь скрипт, создающий 4 дочерних объекта во время выполнения, каждый из которых представляет сторону границы, и прикреплять к ним средства визуализации линий.
В моем случае мне нужно было постоянно изменять размер границы, чтобы она оставалась вокруг моего объекта (текстовая сетка [которая использует средство визуализации сетки] для настраиваемого текстового поля), поэтому при каждом обновлении я делала это:
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()
просто обращается к соответствующему средству рендеринга строки (указанному первым параметром) и устанавливает его начало и конец для первого и второго вектора соответственно.
Обратите внимание, что я использовал в renderer
качестве ссылки для размера, но, очевидно, вы можете использовать любой прямоугольник, если х, у верхний левый угол.
Из того, что я могу сказать, это работает очень хорошо, отлично смотрится в игре, потому что я могу легко перемещать свой ограниченный объект вокруг по всем 3 осям (даже поворачивать его, и так как линейные рендеры всегда смотрят в камеру, это не выглядит странно), и это не сложно реализовать.