//Detect if character is on the floor
        private void DetectGrounded()
        {
            float   hradius = GetColliderHeightRadius();
            float   radius  = GetColliderRadius();
            Vector3 center  = GetColliderCenter();

            float gdist; Vector3 gnormal;

            is_grounded   = PhysicsTool.DetectGround(transform, center, hradius, radius, ground_layer, out gdist, out gnormal);
            ground_normal = gnormal;

            float slope_angle = Vector3.Angle(ground_normal, Vector3.up);

            is_grounded = is_grounded && slope_angle <= slope_angle_max;
        }
        //Check if touching the ground
        private void DetectGrounded()
        {
            float radius        = (bounds_extent.x + bounds_extent.z) * 0.5f;
            float center_offset = bounds_extent.y;
            float hradius       = center_offset + ground_detect_dist;

            Vector3 center = transform.position + bounds_center_offset;

            center.y = transform.position.y + center_offset;

            float gdist; Vector3 gnormal;

            is_grounded   = PhysicsTool.DetectGround(transform, center, hradius, radius, ground_layer, out gdist, out gnormal);
            ground_normal = gnormal;
            grounded_dist = gdist;

            float slope_angle = Vector3.Angle(ground_normal, Vector3.up);

            is_grounded = is_grounded && slope_angle <= slope_angle_max;
        }