J'ai fait un petit script permettant à ma caméra de toujours rester dans le dos de mon perso lorsqu'il se déplace.
J'ai cherché des exemples sur le web, mais rien ne correspondait vraiment au truc simple que je voulais faire.
Je pourrais également faire de ma caméra un sous-objet du personnage et la positionner dans son dos, mais en plus d'être vite limité pour ajouter des effets à la caméra, je ne trouve pas ça très pro ...
Le problème, c'est que je pense que mon script est trèèès compliqué et qu'Unity et ses fonctions intégrées permettent fort probablement de faire les choses de manière beaucoup plus simple (j'ai utilisé la trigonométrie) et moins gourmande en ressources ...
Voici mon script basique placé sur la caméra :
Code : Tout sélectionner
[SerializeField]
private Transform tr_goToFollow; // player à suivre
[SerializeField]
private float fl_offset; // offset de la camera / hypoténuse
private void Update()
{
Quaternion playerQtrAngle = tr_goToFollow.rotation; // rotation du player
Vector3 playerEulrAngle = playerQtrAngle.eulerAngles; // rotation en degré
Vector3 playerV3Position = tr_goToFollow.transform.position; // position du player
float posX = playerV3Position.x;
float posZ = playerV3Position.z;
//calcul des coordonnées de la camera
// [-1 pour tourner dans le bon sens] [+90 pour positionner la caméra derrière le player] [Mathf.Pi/180 --> deg en rad] [+ posX ou + posY pour le déplacement]
float x = (Mathf.Cos((playerEulrAngle.y * (-1) + 90) * (Mathf.PI / 180)) * fl_offset) + posX;
float y = this.transform.position.y;
float z = (Mathf.Sin((playerEulrAngle.y * (-1) + 90) * (Mathf.PI / 180)) * fl_offset) + posZ;
this.transform.position = new Vector3(x, y, z);
this.transform.LookAt(tr_goToFollow); // la camera regarde toujours le player
}
Mais je suis persuadé que ce n'est pas la bonne méthode ...
Merci pour conseils, pistes et autres précisions
[Laurent]