Я могу подтвердить, что поведение немного странно для небольших значений.
Если это вариант, вы действительно можете просто уменьшить его. Кроме того, я бы сделал alignment
TransformZ
, который также сильно раскрашивает будущее:
private void Start()
{
lr = gameObject.AddComponent<LineRenderer>();
lr.material = new Material(Shader.Find("Sprites/Default"));
lr.positionCount = 4;
lr.startWidth = 0.13f;
lr.SetPosition(0, new Vector3(0, -2, -1));
lr.SetPosition(1, new Vector3(2, -2, -1));
lr.SetPosition(2, new Vector3(2, 0, -1));
lr.SetPosition(3, new Vector3(0, 0, -1));
lr.loop = true;
lr.useWorldSpace = false;
var gradient = new Gradient();
gradient.SetKeys(new[] { new GradientColorKey(Color.red, 1f), }, new[] { new GradientAlphaKey(1f, 0.0f) });
lr.colorGradient = gradient;
lr.alignment = LineAlignment.TransformZ;
transform.localScale = Vector3.one * 0.5f;
}
![enter image description here](https://i.stack.imgur.com/B4qLu.png)
Для облегчения работы я бы, однако, предложил использовать
lr.SetPosition(0, new Vector3(-1, -1, 0));
lr.SetPosition(1, new Vector3(-1, 1, 0));
lr.SetPosition(2, new Vector3(1, 1, 0));
lr.SetPosition(3, new Vector3(1, -1, 0));
так, чтобы рамка была в центре объекта
Или, если это опция, используйте useWorldSpace = true
и установите значения соответственно (работает, конечно, если кадр не должен двигаться после этого)
lr.useWorldSpace = true;
lr.SetPosition(0, transform.position + new Vector3(-0.5f, -0.5f, 0));
lr.SetPosition(1, transform.position + new Vector3(-0.5f, 0.5f, 0));
lr.SetPosition(2, transform.position + new Vector3(0.5f, 0.5f, 0));
lr.SetPosition(3, transform.position + new Vector3(0.5f, -0.5f, 0));