Exemplo n.º 1
0
 /// <summary>
 /// set options for fragment rigid bodies and layer
 /// </summary>
 public void SetFragmentPhysicsOptions(Exploder2DObject.FragmentOption options)
 {
     if (pool != null)
     {
         foreach (var fragment in pool)
         {
             if (fragment)
             {
                 fragment.SetFragmentPhysicsOptions(options);
             }
         }
     }
 }
Exemplo n.º 2
0
        public void SetFragmentPhysicsOptions(Exploder2DObject.FragmentOption opt)
        {
            if (gameObject)
            {
                gameObject.layer = LayerMask.NameToLayer(opt.Layer);

//                if (spriteRenderer)
//                {
//                    spriteRenderer.sortingLayerName = opt.SortingLayer;
//                    spriteRenderer.sortingOrder = opt.OrderInLayer;
//                }

                DisableColliders(opt.DisableColliders);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// apply physical explosion to fragment piece (2D case)
        /// </summary>
        public void ApplyExplosion2D(Transform meshTransform, Vector2 centroid, Vector2 mainCentroid,
                                     Exploder2DObject.FragmentOption fragmentOption,
                                     bool useForceVector, Vector2 ForceVector, float force, GameObject original,
                                     int targetFragments)
        {
            var rigid = rigid2D;

            // apply fragment mass and velocity properties
            var parentVelocity        = Vector2.zero;
            var parentAngularVelocity = 0.0f;
            var mass         = fragmentOption.Mass;
            var gravityScale = fragmentOption.GravityScale;

            // inherit velocity and mass from original object
            if (fragmentOption.InheritParentPhysicsProperty)
            {
                if (original && original.GetComponent <Rigidbody2D>())
                {
                    var parentRigid = original.GetComponent <Rigidbody2D>();

                    parentVelocity        = parentRigid.velocity;
                    parentAngularVelocity = parentRigid.angularVelocity;
                    mass         = parentRigid.mass / targetFragments;
                    gravityScale = parentRigid.gravityScale;
                }
            }

            var     centroidTransformed = meshTransform.TransformPoint(centroid);
            Vector2 forceVector         = (new Vector2(centroidTransformed.x, centroidTransformed.y) - mainCentroid).normalized;
            float   angularVelocity     = fragmentOption.AngularVelocity * (fragmentOption.RandomAngularVelocityVector ? Random.insideUnitCircle.x : fragmentOption.AngularVelocityVector.y);

            if (useForceVector)
            {
                forceVector = ForceVector;
            }

            rigid.velocity        = forceVector * force + parentVelocity;
            rigid.angularVelocity = angularVelocity + parentAngularVelocity;
            rigid.mass            = mass;
            maxVelocity           = fragmentOption.MaxVelocity;
            rigid.gravityScale    = gravityScale;
        }