void Start() { //Por defecto, al principio el zoom está alejado zoomState = ZommState.far; camera.fieldOfView = fovFar; //Cámara en reposo workingSate = WorkingState.idle; //Asigno los transforms tr = this.gameObject.transform; trPlayer = player.transform; if (viewType == ViewType.custom) { //Me posiciono con respecto al player tr.position = new Vector3(trPlayer.position.x, trPlayer.position.y + height, trPlayer.position.z + distance); } //Calculo la dirección al player diff = trPlayer.position - tr.position; if (viewType == ViewType.custom) { //Miro al player tr.LookAt(trPlayer); } }
IEnumerator makeZoom() { //Variables de trabajo //Diferencia entre valores extremos del zoom float fovDifference = fovFar - fovNear; //Cantidad de fov a sumar o restar. Oscila entre cero y fovDifference float currentFovQuantity; //Tiempo actual de evaluación de la curva. Oscila de cero a uno float currentTimeEvaluate; //Tiempo de transición actual. Oscila de cero a timeTransition. Se incrementa en cada bucle con Time.deltaTime float currentTransitionTime = 0; while (true) { //Calculo el lugar donde debo evaluar la curva, determinado por el tiempo (eje x) currentTimeEvaluate = currentTransitionTime / timeTransition; //La cantidad de fov la devuelve la evaluación de la curva, determinada por la diferencia entre los dos valores extremos del zoom (eje y) currentFovQuantity = transitionZoom.Evaluate(currentTimeEvaluate) * fovDifference; if (debug) { Texto.text = "Zoom: " + currentFovQuantity.ToString(); } if (zoomState == ZommState.far) { //Si estoy en far, le resto la cantidad de fov que me haya devuelto la evaluación de la curva camera.fieldOfView = fovFar - currentFovQuantity; if (currentTimeEvaluate >= 1) { //Se ha evaluado la curva completamente, cambio de estado y salgo del bucle while camera.fieldOfView = fovNear; zoomState = ZommState.near; break; } } else { //Si estoy en near, le sumo la cantidad de fov que me haya devuelto la evaluación de la curva camera.fieldOfView = fovNear + currentFovQuantity; if (currentTimeEvaluate >= 1) { //Se ha evaluado la curva completamente, cambio de estado y salgo del bucle while camera.fieldOfView = fovFar; zoomState = ZommState.far; break; } } //Miro al player tr.LookAt(trPlayer); //Recalculo el tiempo de transición currentTransitionTime += Time.deltaTime; //Salgo hasta el próximo update yield return(0); } //Miro al player tr.LookAt(trPlayer); //Cámara en reposo workingSate = WorkingState.idle; }