Вторник, 05 Ноября 2024, 22:39

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [357]
Статьи об общих понятиях связанных с созданием игр.
Программирование [83]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [147]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [167]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [131]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Как часто вы играете?
Всего ответов: 1077
Главная » Статьи » Программирование

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;
  }
  }
  }
  }
}
Категория: Программирование | Добавил: NEBR (25 Июня 2014) | Автор: Дмитрий NEBR Кичеев
Просмотров: 7883 | Комментарии: 6 | Рейтинг: 5.0/3 |
Теги: Unity 3.5, скроллинг, Затухание, damping, Scroll, Unity, Unity 3, gui, Unity3D, U3D
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Unity GUI скроллинг с затуханием. Touch», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 6
+2-
6 NEBR   (26 Июня 2014 14:56) [Материал]
NEBRЗабыл в статье указать. В _factorDamping рекомендую выставлять 2.

+1-
3 NEBR   (26 Июня 2014 11:04) [Материал]
NEBRСогласен, но новый GUI будет абсолютно другим )

+1-
2 slee   (26 Июня 2014 09:32) [Материал]
sleeБольшое спасибо!
Как раз искал способ реализации затухания и эта статья оказалась очень полезной!
ну просто ОГРОМНОЕ СПАСИБО!

+2-
4 NEBR   (26 Июня 2014 11:06) [Материал]
NEBRПожалуйста ) Рад что кому то пригодилось

+0-
1 leo271083   (26 Июня 2014 02:04) [Материал]
leo271083Напиши, что это на с#, а то мало ли smile Все таки для новичков smile

+1-
5 NEBR   (26 Июня 2014 14:54) [Материал]
NEBRага, забыл указать

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Open 3D Engine
  • IrrRPG Builder
  • WindMill
  • LKI-Creator 3D
  • Chocolate Doom
  • GloryLands
  • Flame
  • C4 Engine
  • Ursina
  • PGD Community Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг