void Move(Vector3 direction, bool upOrDown = false) { if (playerSwimming) { // Do not allow player to swim up out of water, as he would immediately be pulled back in, making jerky movement and playing the splash sound repeatedly if ((direction.y > 0) && (playerMotor.controller.transform.position.y + (50 * MeshReader.GlobalScale) - 0.93f) >= (GameManager.Instance.PlayerEnterExit.blockWaterLevel * -1 * MeshReader.GlobalScale)) { direction.y = 0; } Entity.PlayerEntity player = GameManager.Instance.PlayerEntity; float baseSpeed = playerMotor.GetBaseSpeed(); moveSpeed = playerMotor.GetSwimSpeed(baseSpeed); } // There's a fixed speed for up/down movement if (upOrDown) { moveSpeed = 80f / PlayerMotor.classicToUnitySpeedUnitRatio; } playerMotor.controller.Move(direction * moveSpeed * Time.deltaTime); // Reset to levitate speed in case it has been changed by swimming moveSpeed = 4.0f; }