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; }