Главная » 2014 » Июль » 7 » Unity GUI скроллинг с затуханием. Touch
11:10
Unity GUI скроллинг с затуханием. Touch

Сделать GUI скроллинг в Unity легко. В помощь новичку множество туториалов и официальная справка. Единственным смутным местом может быть скроллинг с затуханием. Как же сделать так, чтобы после того как юзер оторвет палец от экрана, недолгое время постепенно продолжалась прокрутка? И несмотря на то что стандартный GUI уходит в прошлое, есть еще энтузиасты (в основном работающие на Unity версии 3.5), которым данный мануал может быть полезен.

   Код:

using UnityEngine; 
using System.Collections; 

public class MyScroll : MonoBehaviour { 

  // дистанция прокручиваемого окна в X и Y осях 
  Vector2 _scrollPosition = Vector2.zero; 

  // переменная для хранения нажатия 
  Touch _myTouch; 

  // контент, содержимое окна(которое будет прокручивать) 
  string _content; 

  // коэффициент затухания 
  public float _factorDamping; 

  // флаг для определения, оторвал ли юзер палец от экрана 
  bool _flag; 

  // переменные для определения направления прокрутки (вниз или вверх) 
  float _firstYPos; 
  float _secondYPos; 

  void Start() 
  { 
  // заполняю экран 200 строками (чтобы было что крутить) 
  for (int i = 0; i < 200; i++) 
  _content += "\n something content something content something content"; 
  } 

  void OnGUI() 
  { 
  // размещаем на экране ScrollView 
  _scrollPosition = GUI.BeginScrollView(new Rect(0, 0, 480, 725), _scrollPosition, new Rect(0, 0, 480, 1000), GUIStyle.none, GUIStyle.none); 

  // размещаем строку с контентом 
  GUI.Label(new Rect(0, 0, 480, 725), _content); 

  GUI.EndScrollView(); 
  } 

  void FixedUpdate() 
  { 
  // если есть нажатие на экран 
  if (Input.touchCount > 0) 
  { 
  // присваиваем нажатие переменной myTouch 
  _myTouch = Input.GetTouch(0); 

  // если юзер двигает пальцем по экрану, или касание только что произошло 
  if ((_myTouch.phase == TouchPhase.Moved) || (_myTouch.phase == TouchPhase.Began)) 
  { 
  // ставим флаг 
  _flag = false; 

  // присваиваем значение первой переменной для определения направления прокрутки 
  _firstYPos = _scrollPosition.y; 

  // собственно, прокрутка умноженная на _factorDamping (чем он больше, тем быстрее скроллинг) 
  _scrollPosition.y += (_myTouch.deltaPosition.y * _factorDamping); 
  } 
  // если юзер оторвал палец от экрана 
  else if (_myTouch.phase == TouchPhase.Ended) 
  { 
  // присваиваем значение второй переменной для определения направления прокрутки 
  _secondYPos = _scrollPosition.y; 

  // ставим флаг 
  _flag = true; 
  } 
  } 

  // если нет нажатия на экран (условие, при котором должен включится дампинг, затухание) 
  else if (Input.touchCount == 0) 
  { 
  // проверка флага (нужно для того, чтобы дампинг не был бесконечным) 
  if (_flag) 
  { 
  // постепенно уменьшаем коэффициент затухания 
  _factorDamping -= 1 * Time.deltaTime; 

  // определяем направление скроллинга 
  if(_firstYPos < _secondYPos) 
  // прокрутка вверх 
  _scrollPosition.y += _factorDamping; 
  else 
  // прокрутка вниз 
  _scrollPosition.y -= _factorDamping; 

  // если вышло время, отведенное под затухание 
  if (_factorDamping <= 0) 
  { 
  // ставим флаг 
  _flag = false; 

  // возвращаем коэффициенту затухания его изначальное значение 
  _factorDamping = 1.5f; 
  } 
  } 
  } 
  } 

Просмотров: 916 | Добавил: Влад | Рейтинг: 0.0/0
Всего комментариев: 0
dth="100%" cellspacing="1" cellpadding="2" class="commTable">
Имя *: Email:
Код *: