private static void AddEdgeCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) { var edge = go.AddComponent <EdgeCollider2D>(); edge.points = importContext.MakePoints(collision.Points); float height = importContext.MakeScalar(tile.m_Height); go.transform.localPosition = new Vector3(0, height, 0); go.AddComponent <SuperColliderComponent>(); }
private void CollectTilePolygons() { if (!m_Tile.m_CollisionObjects.IsEmpty()) { foreach (var collision in m_Tile.m_CollisionObjects) { var tilePoly = new TilePolygon(); tilePoly.IsClosed = collision.IsClosed; tilePoly.ColliderLayerId = LayerMask.NameToLayer(collision.m_PhysicsLayer); tilePoly.IsTrigger = collision.m_IsTrigger; var points = m_ImportContext.MakePoints(collision.Points); points = points.Select(pt => (Vector2)m_Transform.MultiplyPoint(pt)).ToArray(); tilePoly.Points = points; m_Polygons.Add(tilePoly); } } }
private static void AddPolygonCollider(GameObject go, CollisionObject collision, SuperTile tile, SuperImportContext importContext) { // Note that polygons may need to be decomposed into convex parts var points = importContext.MakePoints(collision.Points); // Triangulate the polygon points var triangulator = new Triangulator(); var triangles = triangulator.TriangulatePolygon(points); // Gather triangles into a collection of convex polygons var composition = new ComposeConvexPolygons(); var convexPolygons = composition.Compose(triangles); PolygonUtils.AddCompositePolygonCollider(go, convexPolygons); // Position is from top-left corner float height = importContext.MakeScalar(tile.m_Height); go.transform.localPosition = new Vector3(0, height, 0); }