创建方形结果为崎岖不平的线条

Creating a square results to rugged line

我正在使用此代码使用线条渲染器创建一个正方形

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;


}

输出:

它工作正常,线条很平滑,但是当我使用此代码将向量点减少到 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));

结果很糟糕

有解决办法吗?我只需要一个小广场。我尝试缩放尺寸,但这仍然不起作用。

我可以确认小值的行为有点奇怪。

如果这是一个选项,您确实可以简单地缩小它。另外我会做 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;
}

为了更容易处理,我建议使用

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