Tôi hiện đang đối mặt với cùng một vấn đề và giải pháp của tôi chính xác là những gì DuckMaestro và Raven Dreamer đã đề xuất - Có một kịch bản tạo ra 4 đối tượng con trong thời gian chạy, mỗi đối tượng đại diện cho một bên của đường viền và gắn trình kết xuất đường truyền cho mỗi đối tượng.
Trong trường hợp của tôi, tôi cần liên tục thay đổi kích thước đường viền để giữ nó xung quanh đối tượng của mình (Lưới văn bản [sử dụng trình kết xuất lưới] cho trường văn bản tùy chỉnh) vì vậy mọi cập nhật tôi đã làm điều này:
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()
chỉ cần truy cập trình kết xuất dòng thích hợp (được chỉ định bởi tham số đầu tiên) và đặt bắt đầu và kết thúc của nó thành vectơ thứ nhất và thứ hai tương ứng.
Lưu ý rằng tôi đã sử dụng renderer
làm tham chiếu cho kích thước của mình, nhưng rõ ràng bạn có thể sử dụng bất kỳ hình chữ nhật nào, miễn là x, y là góc trên cùng bên trái.
Từ những gì tôi có thể nói điều này hoạt động rất tốt, trông rất tuyệt trong trò chơi vì tôi có thể dễ dàng di chuyển vật thể có viền xung quanh theo cả 3 trục (Ngay cả khi xoay nó, và vì các trình kết xuất dòng luôn đối diện với máy ảnh, nó trông không lạ), và không khó để thực hiện.