Пример #1
0
 private void FixedUpdate()
 {
     Utility.RaycastAnswer rca = coll2d.CastAnswer(Vector2.zero, 0, true);
     for (int i = 0; i < rca.count; i++)
     {
         RaycastHit2D rch2d = rca.rch2ds[i];
         if (!rch2d.collider.isTrigger)
         {
             Rigidbody2D rb2d = rch2d.collider.GetComponent <Rigidbody2D>();
             if (rb2d)
             {
                 float speed = rb2d.velocity.magnitude;
                 if (speed >= minSpeed)
                 {
                     Vector2 dir = rb2d.velocity.normalized;
                     if (speed > maxSpeed)
                     {
                         rb2d.velocity = dir * maxSpeed;
                     }
                     float durationLeft = (speed - minSpeed) / (maxSpeed - minSpeed);
                     durationLeft  = Mathf.Max(durationLeft, 1);
                     rb2d.velocity = Vector2.Lerp(
                         rb2d.velocity,
                         dir * minSpeed,
                         Time.deltaTime / durationLeft
                         );
                 }
             }
         }
     }
 }
Пример #2
0
 private void findSwapTarget(Vector2 targetPos, Vector2 tapPos)
 {
     swapTarget = null;
     Utility.RaycastAnswer answer = Utility.RaycastAll(targetPos, Vector2.up, 0);
     for (int i = 0; i < answer.count; i++)
     {
         RaycastHit2D rch2d   = answer.rch2ds[i];
         GameObject   rch2dGO = rch2d.collider.gameObject;
         if (isColliderSwappable(rch2d.collider, tapPos))
         {
             swapTarget = rch2dGO;
         }
     }
 }