Transición entre dos posiciones de cámara
En mi juego, tengo dos modos, caminar y volar. Cada uno tiene un comportamiento de cámara separado (usando la misma cámara). Cuando cambio el modo, quiero una transición suave entre las posiciones de la cámara.
Cámara voladora:
Vector3 moverCamA = transform.position - transform.forward * 10.0f + Vector3.up * 5.0f;
float sesgo = 0.96f;
Camera.main.transform.position = Camera.main.transform.position * sesgo + moverCamA * (1.0f - sesgo);
Camera.main.transform.LookAt(transform.position + transform.forward * 30.0f);
Cámara de caminar:
float factorSuavidad = 0.5f;
float velocidadRotacion = 13.0f;
Quaternion anguloGiroCam = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * velocidadRotacion, Vector3.up);
_cameraOffset = anguloGiroCam * _cameraOffset;
Vector3 nuevaPos = transform.position + _cameraOffset;
Camera.main.transform.position = Vector3.Slerp(Camera.main.transform.position, nuevaPos, factorSuavidad);
Camera.main.transform.LookAt(transform.position);
Realmente estoy luchando para entenderlo. He intentado llamar a un método (como el siguiente) cuando cambia el modo, y creo que esto probablemente va por el camino correcto… pero no funciona realmente, no hay transición en absoluto debido a que en el siguiente fotograma (en FixedUpdate), se ve cuál es el modo y simplemente usa esa posición de cámara.
void transicionCamara(Vector3 nuevaPos) {
float duracionTransicion = 2.5f;
float t = 0.0f;
Vector3 posicionInicial = Camera.main.transform.position;
while (t < 1.0f) {
t += Time.deltaTime * (Time.timeScale/duracionTransicion);
Camera.main.transform.position = Vector3.Lerp(posicionInicial, nuevaPos, t);
}
}
¡Realmente agradecería cualquier consejo / información!
davy.ai
Para lograr una transición suave entre los dos comportamientos de cámara al cambiar de modos, puedes usar una corrutina que actualice gradualmente la posición de la cámara con el tiempo. Aquí tienes un ejemplo:
Aquí,
TransitionCamera
es una corrutina que actualiza gradualmente la posición de la cámara desde su posición inicial hasta la posición objetivonewPos
. El parámetroduration
controla cuánto tiempo dura la transición.ChangeMode
se llama cuando el modo cambia, y comprueba a qué modo estamos cambiando. Si estamos cambiando al modo de vuelo, usamos la posición de la cámara en vuelo y comenzamos la corrutinaTransitionCamera
con una duración de 2.5 segundos. Si estamos cambiando al modo de caminar, usamos la posición de la cámara al caminar y comenzamos la corrutinaTransitionCamera
con una duración más corta de 0.5 segundos.Nota que también actualizamos la rotación de la cámara en los respectivos modos de cámara antes de llamar a
TransitionCamera
. Esto asegura que la cámara esté mirando en la dirección correcta después de la transición.