private void setup(ExploreCat targ) { Vector2 targetPos = new Vector2(targ.getRigidBody2D().position.x, targ.getRigidBody2D().position.y + 0.5f); Vector2 dir = targetPos - getRigidBody2D().position; dir.Normalize(); dir *= this.speed; switch (sprite) { case SecondaryType.Star: case SecondaryType.Gem: case SecondaryType.Nebula: case SecondaryType.Snowflake: case SecondaryType.Rose: //rotate motion getRigidBody2D().angularVelocity = speed + 50f; getRigidBody2D().velocity = dir; getRigidBody2D().gravityScale = 0; break; case SecondaryType.Bubbles: case SecondaryType.Butterfly: case SecondaryType.Leaf: case SecondaryType.Rainbow: // direct hit getRigidBody2D().gravityScale = 0; getRigidBody2D().velocity = dir; transform.localEulerAngles = Vector3.zero; break; case SecondaryType.Heart: case SecondaryType.Music: case SecondaryType.Arrow: getRigidBody2D().gravityScale = 0; getRigidBody2D().velocity = dir; rigidBody.constraints = RigidbodyConstraints2D.FreezeRotation; break; case SecondaryType.Bat: case SecondaryType.Skull: getRigidBody2D().gravityScale = UnityEngine.Random.Range(0.7f, 0.9f); getRigidBody2D().velocity = calculateArc(targ); rigidBody.constraints = RigidbodyConstraints2D.FreezeRotation; break; default: //arc motion -> simulate gravity? getRigidBody2D().gravityScale = UnityEngine.Random.Range(0.7f, 0.9f); getRigidBody2D().velocity = calculateArc(targ); break; } }