[MY-AL] script pour caméra / problème avec la fonction RotateAround

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
qwerty31
Messages : 30
Inscription : 15 Nov 2016 17:38
Contact :

[MY-AL] script pour caméra / problème avec la fonction RotateAround

Message par qwerty31 » 07 Jan 2017 18:46

Bonjour à tous !

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 :hehe:
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
	}
}
Merci d'avance pour toute vos réponses, et si je n'ai pas été clair sur quelque chose, demandez-moi, je ferai de mon mieux pour vous éclairer :lol: :lol: :lol:

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [MY-AL] script pour caméra / problème avec la fonction RotateAround

Message par Moi 1971 » 08 Jan 2017 11:39

Bonjour,
Je me demande si ton problème ne viendrait pas de ce que tu ne limite pas la rotation sur l'axe qui pose problème?
Il y a un min et max pour y (qui doit conditionner le droite-gauche) il faut peut-être le faire pour le couple z et y.

De plus, pour quelle raison utilises-tu la fonction LateUpdate()?

qwerty31
Messages : 30
Inscription : 15 Nov 2016 17:38
Contact :

Re: [MY-AL] script pour caméra / problème avec la fonction RotateAround

Message par qwerty31 » 08 Jan 2017 17:29

Bonjour,

La limite sur y correspond à la rotation haut-bas et non droite-gauche. Je n'ai pas de problème avec le déplacement droite-gauche donc je pense pas que ça vienne de là.
Pour le LateUpdate, c'est que à la base cette caméra était sensé suivre le gameobject cible mais je m'occupe d'abord du problème de la rotation avant de m'occuper du suivi.
Petite précision supplémentaire : après plusieurs tests dans l'éditeur, il me semble que le problème vient plus précisément du fait que la fonction Rotatearound ne prend pas en compte l'axe y mais pour un point de départ définit un axe de rotation sans s'occuper du repère de la scène. Pensez-vous que mon hypothèse est plausible, et si oui quel serait le moyen de contrer ce problème ?
Merci d'avance :-D
Mon premier jeu (gratuit) sur Android, réalisé avec Unity3D, Touch'em All ! est disponible sur le Play Store. N'hésitez pas à le tester ! :hehe:

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [MY-AL] script pour caméra / problème avec la fonction RotateAround

Message par Moi 1971 » 08 Jan 2017 18:47

Alors déjà le "vous" n'est pas obligatoire. Surtout que le dimanche, il n'y a pas grand monde... ;-)

Dans la doc Unity ici:
public void RotateAround(Vector3 point, Vector3 axis, float angle);
Description
Rotates the transform about axis passing through point in world coordinates by angle degrees.
Donc ça tourne autour du centre "point" suivant l'axe "axis".

Si j'ai bien compris comment tu fais :
1 : ça tourne
2 : Si "trop y" retour dans les clous...
Pourquoi ne pas calculer avant le "trop y" et prendre ce nouveau point comme centre de rotation avant d'utiliser Rotate?

qwerty31
Messages : 30
Inscription : 15 Nov 2016 17:38
Contact :

Re: [MY-AL] script pour caméra / problème avec la fonction RotateAround

Message par qwerty31 » 12 Jan 2017 19:24

Bonne question :mrgreen: je n'y ai pas pensé :gene:...
Mon premier jeu (gratuit) sur Android, réalisé avec Unity3D, Touch'em All ! est disponible sur le Play Store. N'hésitez pas à le tester ! :hehe:

Répondre

Revenir vers « (C#) CSharp »