// coroutina que pulsa o valor de Field of view da camera
    private IEnumerator PulseFOVEffet(float val)
    {
        // enquanto este processo ocorre o tempo para o jogador é metade do normal
        game_settings.SetTimeMultiplier(0.01f);

        // enquanto o valor do fov nao for igual ao passado
        while (game_settings.CameraFOV != val)
        {
            // move o valor defenido do fov para o valor passado
            game_settings.CameraFOV = Mathf.SmoothStep(game_settings.CameraFOV, val,
                                                       game_settings.FOV_Pulse_Speed * Time.deltaTime);

            // se a diferença ente os dois valores for inferior ao threshold
            if (Mathf.Abs(game_settings.CameraFOV - val) < 0.1f)
            {
                // iguala o valor de fov ao desejado
                game_settings.CameraFOV = val;
                // quebra o ciclo
                break;
            }
            // ponot de paragem para o proximo ciclo "Async"
            yield return(null);
        }

        yield return(new WaitForSecondsRealtime(0.1f));

        // repoem a fov para a normal
        while (game_settings.CameraFOV != game_settings.base_camera_fov)
        {
            // desloca o valor definido para o valor base
            game_settings.CameraFOV = Mathf.SmoothStep(game_settings.CameraFOV, game_settings.base_camera_fov,
                                                       game_settings.FOV_Pulse_Speed * Time.deltaTime);

            // determina se a diferença é menor que o threshold
            if (Mathf.Abs(game_settings.CameraFOV - game_settings.base_camera_fov) < 0.1f)
            {
                // se sim, aplica o valor desejado á camera
                game_settings.CameraFOV = game_settings.base_camera_fov;
                // quebra o ciclo
                break;
            }
            // ponto de paragem para o proximo ciclo
            yield return(null);
        }
        // ao terminar volta a colocar o tempo normal
        game_settings.SetTimeMultiplier(1f);
        // indica que o jogador terminou de mudar de forma
        char_info_.ChangeEnded();
    }