[RESOLU][DB-AL] mouvement de la tête

Toutes les questions sur le développement Mobile, y compris la partie script.
Avatar de l’utilisateur
Alpha Demon
Messages : 27
Inscription : 14 Avr 2017 15:03

[RESOLU][DB-AL] mouvement de la tête

Message par Alpha Demon » 29 Mai 2017 15:22

Bonjour, j'ai exporté mon petit jeu 3D sur android avec un système de mouvement de caméra que j'ai trouvé sur un tutoriel mais cela ne marche pas vraiment sur android.

Code : Tout sélectionner

        public float rotationX;
	public float rotationY;
	public float sensitivity = 5f;

	void Update () {
            rotationX -= Input.GetAxis("Mouse Y") * sensitivity;
            rotationY += Input.GetAxis("Mouse X") * sensitivity;
            
            transform.rotation = Quaternion.Euler(rotationX, rotationY, 0); 
	}
Le problème est que ce script a été fait pour souris donc quand on clique quelque par autre que l'emplacement précédent la caméra par en vrille, savez-vous comment régler ce problème ou connaissez vous un autre script?

merci d'avance.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] mouvement de la tête

Message par boubouk50 » 29 Mai 2017 16:07

Input.GetAxis("Mouse X et Y") te renvoient le delta de la souris entre chaque frame à chaque frame. Le mettre sur un Input tactile ne peut pas marcher tel quel car il te renverront le delta entre deux clics, ce qui n'est pas la même chose.
Il te faudra utiliser les Input.touches, Input.GetTouch, etc

Peux-tu être un peu plus explicite dans ta demande stp?
On ne sait pas ce que le script fait ni ce que tu veux qu'il fasse, explique-nous.
On ne sait pas ce que tu développes et ce à quoi tu l'appliques, explique-nous.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alpha Demon
Messages : 27
Inscription : 14 Avr 2017 15:03

Re: [DB-AL] mouvement de la tête

Message par Alpha Demon » 29 Mai 2017 16:18

Merci de m'avoir répondu, je voudrai que mon script fasse tourner la caméra comme si je faisais tourner ma tête en regardant à doite, à gauche, en haut et en bas.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] mouvement de la tête

Message par boubouk50 » 29 Mai 2017 16:23

Ok, ça c'est bon. Mais comment veux-tu le traduire en touch? Appuies-tu sur l'écran par clic ou glisses-tu le doigt ou veux-tu utiliser un joystick virtuel?
Tu ne peux pas passer directement de la souris au touch pour la simple raison que le système de la souris n'existe pas pour le touch. Donc comment comptes-tu faire? Comment l'utilisateur va tourner la tête?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alpha Demon
Messages : 27
Inscription : 14 Avr 2017 15:03

Re: [DB-AL] mouvement de la tête

Message par Alpha Demon » 29 Mai 2017 16:27

je souhaiterai pouvoir bouger la caméra en glissant mon doigt n'importe où sur l'écran comme en vue 1er personne.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] mouvement de la tête

Message par boubouk50 » 29 Mai 2017 16:30

Donc ce qui en va pas c'est le point de départ, je suppose.
Quand tu commences à toucher l'écran ça fait n'importe quoi au moment du touch puis ça marche plus ou moins correctement? (Il y a surement la sensibilité à régler également)

J'aimerais bien que tu me dises exactement ce qui se passe étape par étape, que je n'ai pas à perdre mon temps à essayer de te sortir les informations de la bouche. Merci.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alpha Demon
Messages : 27
Inscription : 14 Avr 2017 15:03

Re: [DB-AL] mouvement de la tête

Message par Alpha Demon » 29 Mai 2017 16:35

Je commence, je touche l'écran la caméra se tourne dans une certaine position en fonction de la où je touche, puis je glisse mon doigt là tout va fonctionne correctement puis quand je recommence c'est la même chose qu'au départ.

Vraiment désoler si je m'exprime très mal mais même moi j'ai du mal à comprendre le problème.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] mouvement de la tête

Message par boubouk50 » 29 Mai 2017 16:56

Ce n'est pas forcément une mauvaise expression et il n'y a aucun problème à ne pas comprendre, sinon tu ne poserais pas la question. C'est juste que de mon côté, sans explication c'est difficile de comprendre. Décrire le problème tel quel (comme tu viens de le faire, en plus détaillé parfois) est la seule chose que tu puisses faire pour m'expliquer.
Et là, clairement, c'est l'initialisation.
La souris est constamment connectée contrairement à ton doigt. Donc, il n'y a qu'une seule initialisation pour elle, au lancement du jeu, donc pas besoin de se soucier des cas particuliers. Contrairement à ton doigt, qui touche puis ne touche plus, etc. Il n'est pas continu. Il faut donc régler le problème de la discontinuité.
Je pense que seul le premier delta est en cause, car tu passes de 0 à quelque chose en une seule frame.

Cela se gèrera avec les touchPhases. Elles décrivent les phases d'un touch: Debut, Mouvement, Repos, Fin, Annulation.
Ici, il faut que tu testes dans quelle phase tu te situes avant de continuer (s'il y a touch). Si tu es dans la phase de début, alors il ne faut pas bouger la caméra pour éviter la saute.

Essaie:

Code : Tout sélectionner

        public float rotationX;
   public float rotationY;
   public float sensitivity = 5f;

   void Update () {
  	 //Tester si le doigt touche l'écran
   	if (Input.touchCount > 0) {
   		//Ecran touché -> Récupération du delta
            	rotationX -= Input.GetAxis("Mouse Y") * sensitivity;
           	 rotationY += Input.GetAxis("Mouse X") * sensitivity;
           	 
           	 //Appliquer la transformation uniquement si ce n'est pas le premier touch
           	 if (Input.GetTouch (0).phase != TouchPhase.Began)
            		transform.rotation = Quaternion.Euler(rotationX, rotationY, 0); 
        }
   }
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Alpha Demon
Messages : 27
Inscription : 14 Avr 2017 15:03

Re: [DB-AL] mouvement de la tête

Message par Alpha Demon » 29 Mai 2017 18:34

J'ai préféré faire une vidéo pour mieux présenter mon problème :

https://youtu.be/P0L8oHbSM00

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6221
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] mouvement de la tête

Message par boubouk50 » 30 Mai 2017 09:22

On peut pas faire mieux comme explication :super:

Donc le code que je t'ai donné ne change rien?

La caméra semble liée à la position du doigt et pas au delta, pour le coup. Pourtant les rotations ne sont pas affectées directement mais additionnées... Je checke un peu à droite à gauche, et je reviens vers toi.

Plusieurs solutions s'offrent à toi:
J'ai trouvé ce code, il a l'air de faire l'affaire:

Code : Tout sélectionner

private var firstpoint:Vector3; //change type on Vector3
  private var secondpoint:Vector3;
  private var xAngle: float = 0.0; //angle for axes x for rotation
  private var yAngle: float = 0.0;
  private var xAngTemp: float = 0.0; //temp variable for angle
  private var yAngTemp: float = 0.0;
  function Start() {
   //Initialization our angles of camera
   xAngle = 0.0;
   yAngle = 0.0;
   this.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0);
  }
  function Update() {
   //Check count touches
   if(Input.touchCount > 0) {
    //Touch began, save position
    if(Input.GetTouch(0).phase == TouchPhase.Began) {
     firstpoint = Input.GetTouch(0).position;
     xAngTemp = xAngle;
     yAngTemp = yAngle;
    }
    //Move finger by screen
    if(Input.GetTouch(0).phase==TouchPhase.Moved) {
     secondpoint = Input.GetTouch(0).position;
     //Mainly, about rotate camera. For example, for Screen.width rotate on 180 degree
     xAngle = xAngTemp + (secondpoint.x - firstpoint.x) * 180.0 / Screen.width;
     yAngle = yAngTemp - (secondpoint.y - firstpoint.y) *90.0 / Screen.height;
     //Rotate camera
     this.transform.rotation = Quaternion.Euler(yAngle, xAngle, 0.0);
    }
   }
  }
http://answers.unity3d.com/questions/80 ... touch.html

Aussi, un asset du store: https://www.assetstore.unity3d.com/en/#!/content/14489

Et un tutoriel en anglais: https://www.youtube.com/watch?v=zW1lxrgHgG8
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »