Как сделать переключение сцен свайпом? unity3d

208
10 июля 2018, 09:50

Необходимо сделать так, чтобы проводя пальцем вправо/влево переключалась сцена.

Answer 1

Отслеживать свайп можно таким образом(взято Отсюда)

 private Vector3 fp;   //Первая позиция касания
 private Vector3 lp;   //Последняя позиция касания
 private float dragDistance;  //Минимальная дистанция для определения свайпа
 private List<Vector3> touchPositions = new List<Vector3>(); //Храним все позиции касания в списке
void Start(){
dragDistance = Screen.height*20/100; //dragDistance это 20% высоты экрана
}
foreach (Touch touch in Input.touches)  //используем цикл для отслеживания больше одного свайпа
{ //должны быть закоментированы, если вы используете списки 
/*if (touch.phase == TouchPhase.Began) //проверяем первое касание
{
    fp = touch.position;
    lp = touch.position;
}*/
if (touch.phase == TouchPhase.Moved) //добавляем касания в список, как только они определены
{
touchPositions.Add(touch.position);
}
if (touch.phase == TouchPhase.Ended) //проверяем, если палец убирается с экрана
{
    //lp = touch.position;  //последняя позиция касания. закоментируйте если используете списки
    fp =  touchPositions[0]; //получаем первую позицию касания из списка касаний
    lp =  touchPositions[touchPositions.Count-1]; //позиция последнего касания
    //проверяем дистанцию перемещения больше чем 20% высоты экрана
    if (Mathf.Abs(lp.x - fp.x) > dragDistance || Mathf.Abs(lp.y - fp.y) > dragDistance)
    {//это перемещение
          //проверяем, перемещение было вертикальным или горизонтальным 
          if (Mathf.Abs(lp.x - fp.x) > Mathf.Abs(lp.y - fp.y))
          {   //Если горизонтальное движение больше, чем вертикальное движение ...
              if ((lp.x>fp.x))  //Если движение было вправо
              {   //Свайп вправо
                  Debug.Log("Right Swipe");
              }
              else
              {   //Свайп влево
                  Debug.Log("Left Swipe"); 
              }
          }
        else
        {   //Если вертикальное движение больше, чнм горизонтальное движение
             if (lp.y>fp.y)  //Если движение вверх
             {   //Свайп вверх
                 Debug.Log("Up Swipe"); 
             }
             else
             {   //Свайп вниз
                 Debug.Log("Down Swipe");
             }
        }
    } 
}
else
{   //Это ответвление, как расстояние перемещения составляет менее 20% от высоты экрана
}
}
}

И потом грузить сцену

        if ((lp.x>fp.x))  //Если движение в право
         {   //Свайп вверх
             SceneManager.LoadScene(1);
         }
Answer 2

Отслеживайте свайп) например, когда происходит нажатие кнопки/касание запоминайте позицию, когда кнопка отпускается - считайте расстояние между этими точками.

Если оно соответствует тому, при котором вы хотите сменить сцену - говорите SceneManager чтобы он грузил новую сцену.

READ ALSO
Подключение к MySql asp.net

Подключение к MySql asp.net

Не могу подключиться к базе (локальной)Ошибка:

159
Подзапрос к Dictionary, Linq. Получить Max по Value, и Min по Key

Подзапрос к Dictionary, Linq. Получить Max по Value, и Min по Key

У меня спортивный интерес, как сделать следующий запрос более лаконичнымИ вообще понять как осуществляются подзапросы в linq к такой коллекции...

138
Авторизация .Net

Авторизация .Net

У меня возник следущий вопрос: у IdentityServer4 есть AddSigningCredential, который можно использовать для добавления сертификата, который, в свою очередь,...

175