Comment changer la vue de sa caméra facilement, presque sans code ?
Dans ce tutoriel nous allons utiliser 2 caméras, disposant de 2 vues distinctes, permettant de changer de vue dynamiquement pendant l'exécution du jeu.
Comme vous pouvez le voir ci-dessous, grâce à Cinemachine de Unity, le changement se fera facilement d'une caméra vers l'autre, tout cela avec un effet LERP automatique.
En effet il serait tout à fait possible de coder cette transition entre les 2 caméras (FPS mode et skyMode), mais avec Cinemachine nous n'avons rien à faire, c'est pris en charge automatiquement ... excellent, non ?
Mise en place des caméras virtuelles
Reprenez la scène issue du premier tutoriel , et dupliquez la pour partir d'une base avec une première Virtual Camera en mode FPS .
Puis ajoutez une seconde Virtual Camera.
Cette seconde camera virtuelle va nous servir pour la camera en mode SkyMode. Aussi nous devons la paramétrer différemment, vu qu'elle ne sera pas censée suivre un personnage cible.
Ajustez donc les paramètres Body et Aim de cette seconde Virtual Camera à DoNothing !
Au final on réorganise un peu la hierarchy de notre scène afin d'y voir plus clair.
Ainsi on crée un GameObject vide ("empty gameObject" qui sera le parent des caméras virtuelles et de la main camera de la scène. Notez encore une fois le petit logo à droite de Camera, indiquant que cette caméra, portant le composant Camera, est gérée par un composant CinemachineBrain.
Changer de Virtual Camera
Afin de pouvoir passer d'une Virtual Camera à une autre et ainsi indiquer à notre "brain", quelle est la VCamera à utiliser pour le rendu, il suffit de jouer sur l'activation /désactivation des caméras virtuelles.
C'est d'ailleurs ce qui est préconisé par la communauté de Unity, ainsi que la documentation : jouer sur plusieurs Virtual Cameras, plutôt que de changer le paramètre aim et/ou body au runtime.
On va donc créer un script C# nommé SkyToFPS.cs, dans lequel nous allons plaquer cette logique. Ce script sera donné au GameObject de la scène "CAMERAS".
using System.Collections;
using System.Collections.Generic;
using Cinemachine;
using UnityEngine;
public class SkyToFPS : MonoBehaviour {
[SerializeField] private CinemachineVirtualCamera cineCam;
[SerializeField] private CinemachineVirtualCamera cineSkyCam;
[SerializeField] private bool skyMode; //par default setté à False
void Start () {
cineCam.enabled = !skyMode; //true
cineSkyCam.enabled = skyMode; //false
}
void Update () {
if (Input.GetKeyDown (KeyCode.M)) {
skyMode = !skyMode;
Debug.Log ("switch cam Mode " + skyMode);
cineCam.enabled = !skyMode;
cineSkyCam.enabled = skyMode;
}
}
}
Comme vous pouvez le voir on switch entre les 2 Virtual Cameras quand on appuie sur la touche "M" du clavier, ce qui active/désactive la bonne Virtual Camera. De manière très simple ensuite, il suffit de remplir dans l'éditeur les slots cineCame et cineSkyCam.
Et c'est tout ! Il suffit alors de lancer le jeu afin d'observer en temps réel le changement de caméras !