void Update() { Polygon2D polygonA = Polygon2DList.CreateFromGameObject(sliceableA)[0].ToWorldSpace(sliceableA.transform); Polygon2D polygonB = Polygon2DList.CreateFromGameObject(sliceableB)[0].ToWorldSpace(sliceableB.transform); Polygon2D MergedPolygon = Merge2D.Merge(polygonA, polygonB); if (resultObject != null) { UnityEngine.Object.Destroy(resultObject); } if (MergedPolygon != null) { //UnityEngine.Object.Destroy(sliceableA.gameObject); //UnityEngine.Object.Destroy(sliceableB.gameObject); resultObject = new GameObject("Merged Polygon"); MergedPolygon.CreatePolygonCollider(resultObject); Mesh2D mesh = resultObject.AddComponent <Mesh2D>(); mesh.material = OutputMaterial; resultObject.AddComponent <ColliderLineRenderer2D>(); } }
private void CreatePolygon(Polygon2D newPolygon, Transform transform) { GameObject newGameObject = new GameObject(); newGameObject.transform.parent = transform; newGameObject.transform.position = new Vector3(0, 0, visuals.zPosition + 0.01f); newGameObject.AddComponent <Rigidbody2D> (); newGameObject.AddComponent <ColliderLineRenderer2D> ().color = Color.black; Slicer2D smartSlicer = newGameObject.AddComponent <Slicer2D> (); smartSlicer.textureType = Slicer2D.TextureType.Mesh2D; smartSlicer.materialSettings.material = material; newPolygon.CreatePolygonCollider(newGameObject); newPolygon.CreateMesh(newGameObject, new Vector2(1, 1), Vector2.zero, PolygonTriangulator2D.Triangulation.Advanced); }
public void UpdateCollider() { PolygonCollider2D polygonCollider2D = GetComponent <PolygonCollider2D>(); if (polygonCollider2D != null) { Destroy(polygonCollider2D); PolygonCollider2D collider = gameObject.AddComponent <PolygonCollider2D>(); float scale = (float)originalSprite.texture.width / (originalSprite.pixelsPerUnit * 2); // Y? // Check If There Is No Proper Collide Generated () if (collider.pathCount == 1) { Vector2[] standardPentagon = collider.GetPath(0); Vector2 v0 = standardPentagon[0] / scale; Vector2 v1 = new Vector2(0, 1); Vector2 v2 = standardPentagon[1] / scale; Vector2 v3 = new Vector2(-0.9510565f, 0.309017f); if (v0 == v1 && v2 == v3) { Destroy(gameObject); } } if (textureType == TextureType.Sprite) { if (split.enabled == true && (split.splitLimit == false || split.splitCount <= split.maxSplits)) { List <Polygon2D> polys = Polygon2DList.CreateFromPolygonColliderToLocalSpace(collider); List <GameObject> disattachedObjects = new List <GameObject>(); if (polys.Count > 1) { int id = 1; Rigidbody2D originalRigidBody = GetComponent <Rigidbody2D>(); foreach (Polygon2D poly in polys) { GameObject gObject = new GameObject(); gObject.name = gameObject.name + " (" + id + ")"; gObject.transform.parent = transform.parent; Polygon2D polygon = poly; polygon.CreatePolygonCollider(gObject); gObject.transform.position = transform.position; gObject.transform.rotation = transform.rotation; gObject.transform.localScale = transform.localScale; Destruction2D.CopyComponents(this, gObject); gObject.GetComponent <SpriteRenderer>().sprite = spriteRenderer.sprite; Destruction2D destructible = gObject.AddComponent <Destruction2D>(); destructible.replaceSprite = true; destructible.originalSprite = originalSprite; destructible.originalSpriteMaterial = originalSpriteMaterial; destructible.customPolygon = poly; destructible.modifiers = new List <DestructionModifier>(modifiers); destructible.EraseBrushes = new List <EraseMesh>(EraseBrushes); destructible.split.enabled = true; destructible.split.splitLimit = split.splitLimit; destructible.split.maxSplits = split.maxSplits; destructible.split.splitCount = split.splitCount + 1; destructible.centerOfMass = centerOfMass; if (anchorColliders.Count > 0) { if (destructible.Detach(collider) == true) { disattachedObjects.Add(gameObject); } } foreach (Polygon2D p in polys) { if (p != poly) { destructible.erasePolygons.Add(p); } } // CopyRigidbody if (originalRigidBody) { Rigidbody2D newRigidBody = gObject.GetComponent <Rigidbody2D> (); newRigidBody.isKinematic = originalRigidBody.isKinematic; newRigidBody.velocity = originalRigidBody.velocity; newRigidBody.drag = originalRigidBody.drag; newRigidBody.angularVelocity = originalRigidBody.angularVelocity; newRigidBody.angularDrag = originalRigidBody.angularDrag; newRigidBody.constraints = originalRigidBody.constraints; newRigidBody.gravityScale = originalRigidBody.gravityScale; newRigidBody.collisionDetectionMode = originalRigidBody.collisionDetectionMode; //newRigidBody.sleepMode = originalRigidBody.sleepMode; //newRigidBody.inertia = originalRigidBody.inertia; // Center of Mass : Auto / Center if (centerOfMass == CenterOfMass.RigidbodyOnly) { newRigidBody.centerOfMass = Vector2.zero; } } id++; } Destroy(gameObject); } else { if (anchorColliders.Count > 0) { if (Detach(collider) == true) { disattachedObjects.Add(gameObject); } } } if (disattachedObjects.Count > 0) { if ((destructionAnchorEvent != null)) { Destruction2DEvent destruction = new Destruction2DEvent(); destruction.gameObjects = disattachedObjects; destructionAnchorEvent(destruction); } } } } } }