Beispiel #1
0
    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>();
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
                        }
                    }
                }
            }
        }
    }