2017-01-19 7 views
1

У меня есть сценарий с именем AccelerometerMovement, который занимается управлением акселерометром игрока. Игрок просто двигается слева и правый, поэтому я просто принимаю Input.acceleration.x компонент.Акселерометр остановки анимации Запрос на перемещение

Сценарий выглядит следующим образом:

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(); 

     } 
    } 
} 

Как вы можете видеть выше, в соответствии с левой и right..it звонит moveLeft() и moveRight() из другого сценария, который является фактическим скрипт контроллера.

Другой сценарий, когда фактическая функция:

// 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); 

    } 

Теперь, когда я проверил управления на реальном устройстве элементы управления работают хорошо, но есть одна проблема!

Проблема заключается в том, что, когда игрок начинает движение анимации начинается движение, но когда он останавливает простой анимации (или остановить анимацию) не запускается и даже тогда, когда еще движение анимация игрока продолжает идти.

Теперь я не могу понять, как решить эту проблему.

+0

Это C# не Unityscript. Пожалуйста, поймите это. Вы, скорее всего, получите дополнительную помощь, если получите правильные теги. Вы можете использовать Unity C# для Unityscript, чтобы увидеть разницу. – Programmer

+0

Хорошо, я изменил его! Но знаете ли вы решение @Programmer? – utkdub

+0

Не совсем, но, пожалуйста, отредактируйте свой код и добавьте, какая часть кода должна остановиться и воспроизвести простоя анимации. – Programmer

ответ

1

Stop() Функция выше находится в состоянии покоя. Мы должны называть его, поставив одно дополнительное условия:

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

значение позаботится устройство по-прежнему и установить холостые анимации для работы! Поместите выше код сразу после второго еще если в Accelerometer() функция.