2017-01-19 3 views
1

J'ai un script nommé AccelerometerMovement qui s'occupe des commandes accéléromètre du lecteur. Le joueur se déplace juste gauche et droite alors je prends juste le composant Input.acceleration.x.Accéléromètre stop animation Mouvement requête

Le script est la suivante:

public class AccelerometerMovement : MonoBehaviour { 
    private bool isandroid; 

    private float AccelerometerStoreValue; 

    private robotController theRobo; 

    // Use this for initialization 
    void Start() { 
     theRobo = FindObjectOfType<robotController>(); 


     #if UNITY_ANDROID 
     isandroid=true; 
     #else 
     isandroid=false; 
     #endif 
    } 

    // Update is called once per frame 
    void Update() { 
     if (isandroid) { 
      //android specific code 
      Accelerometer(); 


     } else { 
      //any other platform specific code 

     } 
    } 

    void Accelerometer(){ 
     AccelerometerStoreValue = Input.acceleration.x; 
     if (AccelerometerStoreValue > 0.1f) { 
      //right 
      theRobo.moveRight(); 

     } else if (AccelerometerStoreValue < -0.1f) { 
      //left 
      theRobo.moveLeft(); 

     } 
    } 
} 

Comme u peut voir ci-dessus selon la gauche et right..it appelle moveLeft() et MoveRight() à partir d'un autre script qui est le véritable script du contrôleur de joueur.

L'autre scénario où la fonction réelle est:

// after Update() 
public void jump(){ 
     if (grounded) { 
      myRigidBody.velocity = new Vector2 (myRigidBody.velocity.x, jumpHeight); 
      doubleJump = false; 

     } 

     if(!doubleJump&&!grounded){ 

      myRigidBody.velocity = new Vector2 (myRigidBody.velocity.x, jumpHeight); 
      doubleJump = true; 
     } 
    } 

    public void moveLeft(){ 



     myRigidBody.velocity = new Vector2 (-moveSpeed, myRigidBody.velocity.y); 
     robotMove = true; 
     lastMove = myRigidBody.velocity.x; 
     anim.SetFloat ("MoveX", -moveSpeed); 
     anim.SetFloat ("LastMoveX", lastMove); 
     anim.SetBool ("RobotMoving", robotMove); 


    } 

    public void moveRight(){ 



     myRigidBody.velocity = new Vector2 (moveSpeed, myRigidBody.velocity.y); 
     robotMove = true; 
     lastMove = myRigidBody.velocity.x; 
     anim.SetFloat ("MoveX", moveSpeed); 
     anim.SetFloat ("LastMoveX", lastMove); 
     anim.SetBool ("RobotMoving", robotMove); 



    } 
    public void stop(){ 

     robotMove = false; 

     anim.SetBool ("RobotMoving", robotMove); 

    } 

Maintenant, quand je vérifié les contrôles sur l'appareil réel les commandes fonctionnent bien, mais il y a un problème!

Le problème est que lorsque le joueur commence à se déplacer l'animation de démarrage du mouvement, mais quand il arrête la animation au ralenti (ou arrêter l'animation) ne démarre pas et même quand encore l'animation de mouvement des joueurs continue à aller.

Maintenant, je ne suis pas capable de comprendre comment résoudre ce problème.

+0

Ceci est C# non Unityscript. S'il vous plaît, comprenez ça. Vous obtiendrez probablement plus d'aide si vous obtenez les tags correctement. Vous pouvez google Unity C# vs Unityscript pour voir la différence. – Programmer

+0

Ok, je l'ai changé! Mais connaissez-vous la solution @Programmer? – utkdub

+0

Pas vraiment, mais s'il vous plaît modifier votre code et ajouter quelle partie du code devrait s'arrêter et jouer les animations inactives. – Programmer

Répondre

1

la fonction Stop() ci-dessus est dormante. Nous devons l'appeler en mettant une condition supplémentaire:

else if (AccelerometerStoreValue > 0.01f && AccelerometerStoreValue < 0.09f || AccelerometerStoreValue < -0.01f && AccelerometerStoreValue > -0.09f) { 
      theRobo.stop(); 
     } 

les valeurs se chargeront d'appareil encore et fixeront les animations ralenti au travail! Mettez ci-dessus le code juste après 2e sinon si dans Accelerometer() fonction.