// Update is called once per frame void FixedUpdate() { Vector3 vel = gameObject.GetComponent <Rigidbody2D>().velocity; vel += rightAcceleration * Time.deltaTime; Vector3 position = transform.position; if (position.y < -10 || position.y > 10) { position.y = 0; transform.position = position; } onTheGround = false; Vector2 xOffset = Vector2.one / 2; xOffset.y = 0; for (int i = -1; i < 2; i++) { if (rayCastDown(xOffset * i)) { onTheGround = true; break; } } if (onTheGround) { canDoubleJump = true; jumpReleased = false; calledFalling = false; if (canFootstep) { float length = LevelSounds.inst.playFootstep(gameObject.transform.position); canFootstep = false; Invoke("canFootstepReset", length); } if (!onTheGroundLast) { animationBoard.Land(); } } else { animationBoard.setGrounded(false); if (LevelTypeManager.currentLevel == LevelTypeManager.Level.gravityFlip) { animationBoard.Fall(); } else if (vel.y <= 0) { if (!calledFalling) { animationBoard.Fall(); calledFalling = true; Invoke("landDelay", 0.01f); } } } vel = jumpLogic(vel, onTheGround); vel = doubleJumpLogic(vel, onTheGround); if (vel.x >= VariableSpeed.current + tempSpeedBoost) { vel.x = VariableSpeed.current + tempSpeedBoost; } gameObject.GetComponent <Rigidbody2D>().velocity = vel; if (transform.position.x > Camera.main.transform.position.x) { SpriteRenderer sr = gameObject.GetComponentInChildren <SpriteRenderer>(); Vector3 worldPos = Camera.main.ScreenToWorldPoint(new Vector3(Camera.main.pixelWidth, 0.0f, 0.0f)); Vector3 size = sr.GetComponent <Renderer>().bounds.max - sr.GetComponent <Renderer>().bounds.min; worldPos.x -= size.x; worldPos.y = transform.position.y; worldPos.z = transform.position.z; if (transform.position.x > worldPos.x) { transform.position = worldPos; } } onTheGroundLast = onTheGround; }