Создание квадрата результатов для неровной линии - PullRequest
0 голосов
/ 04 июня 2019

Я создаю квадрат, используя средство визуализации линии, используя этот код

public class CreateLine : MonoBehaviour
{
// Start is called before the first frame update
LineRenderer lr;
void Start()
{
    lr = gameObject.AddComponent<LineRenderer>();
    lr.material = new Material(Shader.Find("Sprites/Default"));
    lr.positionCount = 4;
    lr.startWidth = .13f;
    lr.endWidth = .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;
    Gradient gradient = new Gradient();
    gradient.SetKeys(
        new GradientColorKey[]
        {
            new GradientColorKey(Color.red, 1f),
        },
            new GradientAlphaKey[] { new GradientAlphaKey(1f, 0.0f)

        }
        );
    lr.colorGradient = gradient;


}

Вывод: enter image description here

работает нормально, линии гладкие, но когдаЯ уменьшаю векторные точки до 1, используя этот код

    lr.SetPosition(0, new Vector3(0, -1, -1));
    lr.SetPosition(1, new Vector3(1, -1, -1));
    lr.SetPosition(2, new Vector3(1, 0, -1));
    lr.SetPosition(3, new Vector3(0, 0, -1));

результат ужасен enter image description here

Есть ли решение для этого?Мне просто нужен маленький квадрат.Я пытался масштабировать размер, но это все еще не работает.

1 Ответ

3 голосов
/ 04 июня 2019

Я могу подтвердить, что поведение немного странно для небольших значений.

Если это вариант, вы действительно можете просто уменьшить его. Кроме того, я бы сделал 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

Для облегчения работы я бы, однако, предложил использовать

    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));
...