// 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(); }