void DoCameraAnimation()
    {
        switch(estadoAnimacao) {
            case EstadosAnimacao.PARADA:
                estadoAnimacao = EstadosAnimacao.COMECANDO;
                break;
            case EstadosAnimacao.COMECANDO:
                // Processo de aproximar a camera
                cameraAlvo.camera.orthographicSize -= fatorInterpolacaoZoom*Time.deltaTime;
                // Processo de mover a camera
                if (!cameraAlvo.CameraMovendo) {
                    cameraAlvo.IniciarMovimentoPara (waypointAlvo.transform.position);
                }
                if(cameraAlvo.camera.orthographicSize <= fatorZoomCamera) {
                    estadoAnimacao = EstadosAnimacao.OCORRENDO;
                }
                break;
            case EstadosAnimacao.OCORRENDO:
                // Processo de mover a camera
                if (!cameraAlvo.CameraMovendo) {

                    // Camera parada, esperar um pouco na cena.
                    acumuladorTempo += Time.deltaTime;
                    if (acumuladorTempo >= tempoMinimoEspera) {
                        acumuladorTempo = 0;
                    } else {
                        return;
                    }

                    // Definicao do Alvo
                    waypointAlvo = proximoWaypoint;
                    if(proximoWaypoint != null) {
                        proximoWaypoint = proximoWaypoint.nextPoint;
                    }
                    // Movimento
                    if (waypointAlvo == null) {
                        // Fim da animacao
                        cameraAlvo.IniciarMovimentoPara (posicaoCameraOriginal);
                        estadoAnimacao = EstadosAnimacao.TERMINANDO;
                    } else {
                    // A animacao nao acabou ainda. Segue para o proximo ponto.
                        cameraAlvo.IniciarMovimentoPara (waypointAlvo.transform.position);
                    }
                }
                break;
            case EstadosAnimacao.TERMINANDO:
                // Processo de afastar a camera
                cameraAlvo.camera.orthographicSize += fatorInterpolacaoZoom*Time.deltaTime;
                if(cameraAlvo.camera.orthographicSize >= tamanhoOrtograficoOriginal) {
                    estadoAnimacao = EstadosAnimacao.TERMINADO;
                }
                break;
            case EstadosAnimacao.TERMINADO:
                fimAnimacao = true;
                break;
        }
    }
    // Inicializacao de variaveis
    void Start()
    {
        waypointAlvo = primeiroWaypoint;
        proximoWaypoint = primeiroWaypoint.nextPoint;
        acumuladorTempo = 0;
        fatorZoomCamera = 3f;
        tamanhoOrtograficoOriginal = cameraAlvo.camera.orthographicSize;
        posicaoCameraOriginal = new Vector3(cameraAlvo.transform.position.x, cameraAlvo.transform.position.y, cameraAlvo.transform.position.z);

        fatorInterpolacaoZoom = (tamanhoOrtograficoOriginal-fatorZoomCamera) / (tempoMinimoEspera);
        estadoAnimacao = EstadosAnimacao.PARADA;
    }