Je fais appel à vous car j'essaie de programmer un script pour une caméra dans un projet Android. Cette caméra a pour but de regarder un objet dans ma scène en étant contrôlée par joystick. En gros, j'utilise les fonctions RotateAround et LookAt avec comme paramètres les valeurs renvoyées par mon joystick (j'utilise CnControls). Sauf que voilà, mon script fonctionne sauf que sur la moitié de ma scène, lorsque j'oriente le joystick vers le haut, des fois ma caméra monte et des fois ma caméra descend. J'ignore si ce problème vient de la fonction RotateAround, de l'éditeur ou de mon script. Voilà pourquoi je fais appel à vous
Voici mon script entier commenté :
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
using CnControls;
public class PlayerCameraController : MonoBehaviour {
public GameObject player; // l'objet que la caméra regarde
public int speed; // la vitesse de rotation de la caméra
public float MinimalLimit;
private float MaximalLimit; // les limites minimales et maximales de rotation de la caméra sur y afin d'éviter de faire un tour complet ou de passer en-dessous
private Vector3 mvmt; // le vecteur de mouvement de la caméra
private Vector3 RectificationLimit; // variable pour rectifier la rotation de la caméra si elle dépasse les limites
void Start ()
{
mvmt = Vector3.zero;
speed = 25;
MinimalLimit = 0.5f;
MaximalLimit = 3.5f;
RectificationLimit = Vector3.zero;
transform.LookAt(player.transform); // initialisation des variables, je ne vois pas trop quoi dire ici
}
void LateUpdate ()
{
mvmt.y = CnInputManager.GetAxis("CameraHorizontal");
mvmt.x = CnInputManager.GetAxis("CameraVertical");
// je récupère les valeurs du joystick de la caméra et les met dans le vecteur mvmt
transform.RotateAround(player.transform.position, mvmt, speed * Time.deltaTime);
RectificationLimit = Vector3.zero; // j'initialise le vecteur de correction à 0
if (transform.position.y > MaximalLimit)
{
RectificationLimit.y = MaximalLimit - transform.position.y ;
transform.Translate(RectificationLimit);
}
RectificationLimit = Vector3.zero;
if (transform.position.y < MinimalLimit)
{
RectificationLimit.y = MinimalLimit - transform.position.y ;
transform.Translate(RectificationLimit);
}
// si les valeurs minimales ou maximales de rotation de la caméra sont dépassées, on les corrige
transform.LookAt(player.transform);
// on regarde l'objet à regarder
}
}