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 ); } } } } }
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; } } }