Ваша проблема в том, что LineRenderer работает с координатами в Unity Units.
A Screenspace Overlay
canvas имеет масштабирование размера пикселя, поэтому ширина и высота (в единицах Unity) совпадают с шириной и высотой (в пикселях) окна.
→ после добавления4 точки
0, 0, 0
2, 0, 0
2, -2, 0
0, -2, 0
в мировом пространстве, это означает, что они на холсте будут использовать, например, 2px, -2px, 0px
→ очень маленький.
Вы можете, например, умножить размеры на высоту или ширину изображения./canvas.
private void Start()
{
var lineRenderer = GetComponent<LineRenderer>();
var image = GetComponentInParent<RectTransform>();
// get the Unity worldspace coordinates of the images corners
// note: to get the scales like that ofcourse only works
// if the image is never rotated!
var worlsCorners = new Vector3[4];
image.GetWorldCorners(worlsCorners);
var imageWorldSize = new Vector2(Mathf.Abs(worlsCorners[0].x - worlsCorners[2].x), Mathf.Abs(worlsCorners[1].y - worlsCorners[3].y));
var positions = new Vector3[lineRenderer.positionCount];
var pointnum = lineRenderer.GetPositions(positions);
for (var i = 0; i < pointnum; i++)
{
positions[i] = positions[i] * imageWorldSize.x;
}
lineRenderer.SetPositions(positions);
}
Примечание , однако я даже не уверен, что вы увидите этот LineRenderer, так как это не компонент пользовательского интерфейса, я уверен, чтоНаложение ScreenSpace сделает каждое изображение и т. Д. Всегда рендерингом поверх него.