private void gravity() { if (!drawRayVert(.22f, Vector2.down, downRayLen, downRaySpace)) { airState = airborne.falling; } else { airState = airborne.grounded; currentFallingSpeed = 0; } RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 100f, rayLayer); RaycastHit2D hit2 = Physics2D.Raycast(new Vector3((transform.position.x - leftRaySpace / 2), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer); RaycastHit2D hit3 = Physics2D.Raycast(new Vector3((transform.position.x + rightRaySpace / 2), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer); RaycastHit2D hit4 = Physics2D.Raycast(new Vector3((transform.position.x - leftRaySpace / 4), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer); RaycastHit2D hit5 = Physics2D.Raycast(new Vector3((transform.position.x + rightRaySpace / 4), transform.position.y, transform.position.z), Vector2.down, 100f, rayLayer); Debug.DrawRay(transform.position, Vector2.down * 100f, Color.cyan); Debug.DrawRay(new Vector3((transform.position.x - leftRaySpace / 2), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan); Debug.DrawRay(new Vector3((transform.position.x - leftRaySpace / 4), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan); Debug.DrawRay(new Vector3((transform.position.x + rightRaySpace / 2), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan); Debug.DrawRay(new Vector3((transform.position.x + rightRaySpace / 4), transform.position.y, transform.position.z), Vector2.down * 100f, Color.cyan); double leftDist = Math.Round(hit2.distance, 2); double leftinnerDist = Math.Round(hit4.distance, 2); double centerDist = Math.Round(hit.distance, 2); double rightDist = Math.Round(hit3.distance, 2); double rightinnerDist = Math.Round(hit5.distance, 2); if (hit.collider != null) { Debug.Log(leftDist.ToString() + " " + leftinnerDist.ToString() + " " + centerDist.ToString() + " " + rightinnerDist.ToString() + " " + rightDist.ToString() + " " + currentFallingSpeed.ToString()); if (-hit.distance >= currentFallingSpeed - gravForce && airState == airborne.falling) { //making sure my next gravity transform is valid Vector3 direction = new Vector3(transform.position.x, transform.position.y - hit.distance, transform.position.z); transform.position = direction; } else if (airState == airborne.falling) { //applying gravity Vector3 direction = new Vector3(transform.position.x, transform.position.y + currentFallingSpeed, transform.position.z); transform.position = direction; currentFallingSpeed -= gravForce; } if (airState == airborne.grounded && hit.distance < .24f && (leftDist == centerDist && centerDist == rightDist && leftDist == leftinnerDist && rightDist == rightinnerDist)) { //correcting distance from ground if incorrect Vector3 direction = new Vector3(transform.position.x, transform.position.y + (.25f - hit.distance), transform.position.z); transform.position = direction; } else if (airState == airborne.grounded && hit.distance > .26f && (leftDist == centerDist && centerDist == rightDist && leftDist == leftinnerDist && rightDist == rightinnerDist)) { Vector3 direction = new Vector3(transform.position.x, transform.position.y - (hit.distance - .25f), transform.position.z); transform.position = direction; } } }
void Start() { airState = airborne.grounded; runState = runStates.idle; }