public static void Bounce (Rigidbody mover, Transform obstacle, BounceTowards bounceTo) { Vector3 direction; Direction side = CalcRectSide(mover.transform.position.x, mover.transform.position.z, obstacle); float dirCoeff = 1.0f; if (bounceTo == BounceTowards.Inwards) dirCoeff = -1.0f; if (side == Bouncer.Direction.top) direction = new Vector3 (mover.velocity.x, 0.0f, dirCoeff * Mathf.Abs(mover.velocity.z)); else if (side == Bouncer.Direction.bottom) direction = new Vector3 (mover.velocity.x, 0.0f, -dirCoeff * Mathf.Abs(mover.velocity.z)); else if (side == Bouncer.Direction.left) direction = new Vector3 (dirCoeff * Mathf.Abs(mover.velocity.x), 0.0f, mover.velocity.z); else if (side == Bouncer.Direction.right) direction = new Vector3 (-dirCoeff * Mathf.Abs(mover.velocity.x), 0.0f, mover.velocity.z); else direction = new Vector3 (0.0f, 0.0f, 0.0f); mover.velocity = direction; }
public static void Bounce(Rigidbody mover, Transform obstacle, BounceTowards bounceTo) { Vector3 direction; Direction side = CalcRectSide(mover.transform.position.x, mover.transform.position.z, obstacle); float dirCoeff = 1.0f; if (bounceTo == BounceTowards.Inwards) { dirCoeff = -1.0f; } if (side == Bouncer.Direction.top) { direction = new Vector3(mover.velocity.x, 0.0f, dirCoeff * Mathf.Abs(mover.velocity.z)); } else if (side == Bouncer.Direction.bottom) { direction = new Vector3(mover.velocity.x, 0.0f, -dirCoeff * Mathf.Abs(mover.velocity.z)); } else if (side == Bouncer.Direction.left) { direction = new Vector3(dirCoeff * Mathf.Abs(mover.velocity.x), 0.0f, mover.velocity.z); } else if (side == Bouncer.Direction.right) { direction = new Vector3(-dirCoeff * Mathf.Abs(mover.velocity.x), 0.0f, mover.velocity.z); } else { direction = new Vector3(0.0f, 0.0f, 0.0f); } mover.velocity = direction; }