2016-12-21 5 views
0

Хорошо, Ive опубликовал всюду об этом, но не может найти ответ. У меня есть игра C#, сделанная в Unity, и я использую код для перехода между моей незанятой анимацией в мой цикл ходьбы, в зависимости от пользователей.Как различать последовательные нажатия и одиночные краны? Unity анимация?

Моя проблема в том, что я не могу различать последовательные и одиночные краны. Я попытался увеличивать ints и устанавливать их на ноль, когда персонаж перестает двигаться, таймеры, все, но не получают надежных результатов.

В основном мой персонаж имеет 3 состояние, что ему нужно, чтобы переключаться между в зависимости от количества нажатий:

Idle = не постукивания, так что он не двигается (отводы вызвать 1 блок вперед) пошагового = 1 кран, чередуются между вправо или влево непрерывная ходьбы = множество ответвлений, так что он постоянно двигается

до сих пор Ive сделали это: основой, если его текущая позиция не его последний (он двигается) у меня есть таймер, который записывает свое время гулять пешком. Если этот таймер находится выше примерно того времени, когда ему требуется 1 шаг, я перехожу к анимации непрерывной ходьбы. Если он остановится, значит, таймер установлен на ноль.

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

if (currentPos != lastPos && didCollide == false) { 
      //print ("moving now"); 
      animator.SetBool ("isWalking", true); 
      if (timeWalking >= 0.1f) { 
       //this is for continuous cycle 
       animator.SetBool("contWalking", true); 
      } else { 
       if (InputManager.stepCount % 2 != 0) { 
        //individual cycle left 
        animator.SetFloat ("walkOffset",animOffset); 

       } else { 
        //individual cycle right 
        animator.SetFloat ("walkOffset",animOffset); 

       } 
       animOffset += 0.1f; 
      } 

      timeWalking += Time.deltaTime; 

     } else { 
      //stopped 
      animator.SetBool ("isWalking", false); 
      animator.SetBool("contWalking", false); 
      timeWalking = 0.0f; 
     } 
     lastPos = currentPos; 

И:

enter image description here

Проблема время, кажется, изменяется, и это может заставить его непрерывный цикл лишь изредка, и то Glitchy. Существует много заиканий, так как в основном он переходит в одноступенчатое состояние и не может продолжать работать, даже когда он некоторое время движется.

Я вне идеи. Как я могу перейти на непрерывный цикл ходьбы, исходя из того, что последовательное нажатие? Не думайте, что таймеры - это путь. Это возможно?

ответ

0

Что вам нужно сделать, это сэкономить время первого касания и подождать второго крана. Если второе нажатие запускает состояние двойного касания, еще раз запустите одно касание. Ожидание от 0,5 до 0,8 секунд для 2-го крана хорошее. Для подробного объяснения и кода перейдите к этой теме: https://forum.unity3d.com/threads/single-tap-double-tap-script.83794/

0

Если вы хотите избежать осложнений, я бы порекомендовал TouchKit от гениального Prime31. Это бесплатно, с открытым исходным кодом и просто работает :)

Смежные вопросы