Прежде всего, убедитесь, что у вас правильно настроен CharacterController и проверьте, что LayerMask учитывает слои, на которых персонаж может находиться.
Чтобы исправить проблему с прыжком в стоячем состоянии, вам может потребоваться вручную устанавливать значения isGrounded в true или false в зависимости от того, находится ли персонаж на поверхности или нет. Например, вы можете использовать Raycast вниз от персонажа и проверять, касается ли он земли.
Чтобы изменить поведение прыжка в зависимости от движения, вы можете проверить скорость персонажа перед выполнением прыжка. Если скорость равна нулю или близка к нулю, вы можете реализовать прыжок в стоячем состоянии. Если скорость больше нуля, то выполнять прыжок для движущегося персонажа.
Более конкретную помощь можно предоставить, если вы укажете язык программирования и используемый движков/фреймворков.