В даний час я стикаюся з тією самою проблемою, і моє рішення полягає саме в тому, що запропонували 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-х осях (Навіть обертати його, а оскільки рендери завжди стикаються з камерою, це не виглядає дивно), і це не важко здійснити.