J'ai un étrange petit pblm que je vous soumets ici
Le concept est simple, Une sphere centrale autour de laquelle gravite 4 écrans.
la rotation des écrans est auto si pas de doigt, manuelle si l'on pose un doigt.
Si l'on bouge 2 doigts (posés sur écran) cela zoom l'écran face caméra ou dézoom si écran zoomé
La caméra ne bouge pas.
Bref mon petit test fonctionne bien mais parfois quand je zoom, l'écran zoom et dézoom immédiatement (comme si dans mon script j'étais passé 2 fois dans la condition de test IF 2 DOIGTS)
Et ce alors que mes doigts n'ont mm pas quitté l'écran ?
Voici le code, merci de vos lumières là moi je ne vois plus rien
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class RotationScript : MonoBehaviour
{
bool multiTouchEnabled;
private float Rotspeed = 0.2f;
public GameObject ObjEcran1;
public GameObject ObjEcran2;
public GameObject ObjEcran3;
public GameObject ObjEcran4;
bool CCOroutine = false;
bool FlagZoomDeZoom = false;
private Animation SCriptZoom1;
private Animation SCriptZoom2;
private Animation SCriptZoom3;
private Animation SCriptZoom4;
// ---------------------------DEBUT START-----------------------------------------------
void Start ()
{
multiTouchEnabled = true;
SCriptZoom1 = ObjEcran1.GetComponent<Animation>();
SCriptZoom2 = ObjEcran2.GetComponent<Animation>();
SCriptZoom3 = ObjEcran3.GetComponent<Animation>();
SCriptZoom4 = ObjEcran4.GetComponent<Animation>();
}
// ---------------------------FIN START-----------------------------------------------
// ---------------------------DEBUT UPDATE-----------------------------------------------
void Update ()
{
// Touch = 0
// TANT QUE NO TOUCH (pas de touch écran)
if (Input.touchCount == 0)
{
if (FlagZoomDeZoom) // FlagZoomDeZoom à true donc Zoom demandé/en cours
{
// On ne fait rien pas de rotation car l'écran est zoomé, donc on attends que écran soit dézommé pour reprendre la rotation (FlagZoomDeZomm = False)
Debug.Log (" FlagZoomDeZoom Update Touch 0 : " + FlagZoomDeZoom);
}
else // FlagZoomDeZoom à false donc pas de fenetre zoomé, on applique une pause de 4 sec SSI un doigt a été précdement appuyé sinon on reprends la rotation
{
if (CCOroutine) // CCOroutine à true donc un doigt a été précédement appuyé
{
StartCoroutine(Wait4Sec(3.0F)); // Pause 4 secondes
}
else // Pas de doigt avant donc on fait tourner
{
gameObject.transform.Rotate(Vector3.up, Rotspeed);
}
}
}
// Fin TANT QUE NO TOUCH
// Touch = 1
// Si 1 DOIGT QUI BOUGE
if (Input.touchCount == 1) // && Input.GetTouch (0).phase == TouchPhase.Moved)
{
//Vector2 touchDeltaPosition2 = Input.GetTouch (0).deltaPosition;
Touch Doigt = Input.GetTouch (0);
//float MouvX = touchDeltaPosition2.x;
float MouvX = Doigt.deltaPosition.x;
float CoordX = Doigt.position.x;
float CoordY = Doigt.position.y;
MouvX = (MouvX / 2);
if (FlagZoomDeZoom== false)// FlagZoomDeZoom à faux donc pas de Zoom en cours donc ok pour rotation d/g
{
gameObject.transform.Rotate (0, -MouvX, 0);
CCOroutine =true; // On passe CCOroutine à vrai pour qu'une fois le doigt enlevé on ai une pause de 4s avant de reprendre la rotation automatique
}
}
// Fin Si 1 DOIGT QUI BOUGE
// Touch = 2
// Si 2 DOIGTS QUI BOUGENT
if (Input.touchCount == 2 && Input.GetTouch (0).phase == TouchPhase.Moved)
{
this.FunctionDetecPositionEcran();
}
// Fin Si 2 DOIGTS QUI BOUGENT
}
// --------------------------FIN UPDATE------------------------------------------------
// ---------------------------DEBUT VOID ZOOM -----------------------------------------------
void FunctionZoom (string NumEcranAZoom)
{
multiTouchEnabled = false;
switch(NumEcranAZoom)
{
case "car_1":
gameObject.transform.Rotate (0,-gameObject.transform.localEulerAngles.y,0);
SCriptZoom1.animation[NumEcranAZoom].speed = 1.0f; // Zoom
SCriptZoom1.animation.Play(NumEcranAZoom);
break;
case "car_2":
gameObject.transform.Rotate (0,(90 - gameObject.transform.localEulerAngles.y),0);
SCriptZoom2.animation[NumEcranAZoom].speed = 1.0f; // Zoom
SCriptZoom2.animation.Play(NumEcranAZoom);
break;
case "car_3":
gameObject.transform.Rotate (0,(180 - gameObject.transform.localEulerAngles.y),0);
SCriptZoom3.animation[NumEcranAZoom].speed = 1.0f; // Zoom
SCriptZoom3.animation.Play(NumEcranAZoom);
break;
case "car_4":
gameObject.transform.Rotate (0,(270 - gameObject.transform.localEulerAngles.y),0);
SCriptZoom4.animation[NumEcranAZoom].speed = 1.0f; // Zoom
SCriptZoom4.animation.Play(NumEcranAZoom);
break;
}
FlagZoomDeZoom =true;
StartCoroutine(Wait4Sec(1.0F)); // Pause 4 secondes
multiTouchEnabled = true;
}
// ---------------------------FIN VOID ZOOM ------------------------------------------------
// ---------------------------DEBUT VOID DEZOOM -----------------------------------------------
void FunctionDeZoom (string NumEcranADeZoom)
{
switch(NumEcranADeZoom)
{
case "car_1":
SCriptZoom1.animation[NumEcranADeZoom].speed = -2.0f; // DeZoom
SCriptZoom1.animation[NumEcranADeZoom].time = SCriptZoom1.animation[NumEcranADeZoom].length;
SCriptZoom1.animation.Play(NumEcranADeZoom);
break;
case "car_2":
SCriptZoom2.animation[NumEcranADeZoom].speed = -2.0f; // DeZoom
SCriptZoom2.animation[NumEcranADeZoom].time = SCriptZoom2.animation[NumEcranADeZoom].length;
SCriptZoom2.animation.Play(NumEcranADeZoom);
break;
case "car_3":
SCriptZoom3.animation[NumEcranADeZoom].speed = -2.0f; // DeZoom
SCriptZoom3.animation[NumEcranADeZoom].time = SCriptZoom3.animation[NumEcranADeZoom].length;
SCriptZoom3.animation.Play(NumEcranADeZoom);
break;
case "car_4":
SCriptZoom4.animation[NumEcranADeZoom].speed = -2.0f; // DeZoom
SCriptZoom4.animation[NumEcranADeZoom].time = SCriptZoom4.animation[NumEcranADeZoom].length;
SCriptZoom4.animation.Play(NumEcranADeZoom);
break;
}
FlagZoomDeZoom = false; // Passe à false pour dire que DeZoomé
}
// ---------------------------FIN VOID DEZOOM ------------------------------------------------
// ---------------------------DEBUT VOID POSTION - ECRAN -----------------------------------------------
void FunctionDetecPositionEcran ()
{
if (gameObject.transform.localEulerAngles.y > -0.9999 && gameObject.transform.localEulerAngles.y < 35)
{
if (FlagZoomDeZoom)// FlagZoomDeZoom à true donc Zoom en cours
{
this.FunctionDeZoom("car_1");
}
else
{
this.FunctionZoom("car_1");
}
}
if (gameObject.transform.localEulerAngles.y > 45 && gameObject.transform.localEulerAngles.y < 125)
{
if (FlagZoomDeZoom)// FlagZoomDeZoom à true donc Zoom en cours
{
this.FunctionDeZoom("car_2");
}
else
{
this.FunctionZoom("car_2");
}
}
if (gameObject.transform.localEulerAngles.y > 135 && gameObject.transform.localEulerAngles.y < 215)
{
if (FlagZoomDeZoom)// FlagZoomDeZoom à true donc Zoom en cours
{
this.FunctionDeZoom("car_3");
}
else
{
this.FunctionZoom("car_3");
}
}
if (gameObject.transform.localEulerAngles.y > 235 && gameObject.transform.localEulerAngles.y < 315)
{
if (FlagZoomDeZoom)// FlagZoomDeZoom à true donc Zoom en cours
{
this.FunctionDeZoom("car_4");
}
else
{
this.FunctionZoom("car_4");
}
}
if (gameObject.transform.localEulerAngles.y > 335 && gameObject.transform.localEulerAngles.y < 361)
{
if (FlagZoomDeZoom)// FlagZoomDeZoom à true donc Zoom en cours
{
this.FunctionDeZoom("car_1");
}
else
{
gameObject.transform.Rotate (0,(360 - gameObject.transform.localEulerAngles.y),0);
this.FunctionZoom("car_1");
}
}
}
// ---------------------------FIN VOID POSTION - ECRAN ------------------------------------------------
// ---------------------------DEBUT PARAM COROUTINES-----------------------------------------------
IEnumerator Wait4Sec(float waitTime)
{
yield return new WaitForSeconds(waitTime);
//Debug.Log ("Waited a sec : " + waitTime);
if (FlagZoomDeZoom == false)
{
CCOroutine = false;
}
}
}