#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
и готово, верно?