Как добавить коллайдер для сетки из скрипта

#unity3d

#unity3d

Вопрос:

У меня есть функция, которая рисует Mesh .

Он рисуется на плоскости XZ, а Y является постоянным значением

Я пытаюсь добавить Collider внутри функции, но у меня проблема. Я не могу уловить правильную форму.

Я добавлю, что ни один из коллайдеров по умолчанию не работает должным образом

 GameObject DrawMesh2D(Vector3 startPoint, Vector3 endPoint, float width, string name)
{
    List<Vector2> vertices2D = new List<Vector2>();
    List<Vector3> vertices3D = new List<Vector3>();

    GameObject polygon = new GameObject();
    polygon.name = name;

    var v = endPoint - startPoint;
    var s = Vector3.Normalize(Vector3.Cross(v, Vector3.up));
    var P1 = startPoint   s * width / 2;
    var P2 = startPoint - s * width / 2;
    var P3 = endPoint - s * width / 2;
    var P4 = endPoint   s * width / 2;

    vertices3D.Add(P1);
    vertices3D.Add(P2);
    vertices3D.Add(P3);
    vertices3D.Add(P4);

    vertices2D.Add(new Vector2(P1.x, P1.z));
    vertices2D.Add(new Vector2(P2.x, P2.z));
    vertices2D.Add(new Vector2(P3.x, P3.z));
    vertices2D.Add(new Vector2(P4.x, P4.z));

    var triangulator = new Triangulator(vertices2D.ToArray());
    var indices = triangulator.Triangulate();

    var mesh = new Mesh
    {
        vertices = vertices3D.ToArray(),
        triangles = indices
    };

    mesh.RecalculateNormals();
    mesh.RecalculateBounds();

    var meshRenderer = polygon.AddComponent<MeshRenderer>();

    var filter = polygon.AddComponent<MeshFilter>();
    filter.mesh = mesh;

    polygon.transform.parent = area2D.transform;

    var polygonCollider = polygon.AddComponent<PolygonCollider2D>();

    polygonCollider.pathCount = 4;
    polygonCollider.SetPath(0, new Vector2[] { new Vector2(P1.x, P1.z), new Vector2(P2.x, P2.z) });
    polygonCollider.SetPath(1, new Vector2[] { new Vector2(P2.x, P2.z), new Vector2(P3.x, P3.z) });
    polygonCollider.SetPath(2, new Vector2[] { new Vector2(P3.x, P3.z), new Vector2(P4.x, P4.z) });
    polygonCollider.SetPath(3, new Vector2[] { new Vector2(P4.x, P4.z), new Vector2(P1.x, P1.z) });

    return polygon;
}
 

Комментарии:

1. none of the default Collider works properly что именно это значит? В чем именно проблема с решением, которое вы используете в настоящее время? Почему бы просто не установить polygonCollider.points = vertices2D.ToArray(); ?

2. На самом деле ваш случай выглядит так, как будто простое создание 2D-квадрата и его соответствующее масштабирование было бы намного проще? Поверните его соответствующим образом, добавьте a BoxCollider2D и готово, верно?