Вторник, 26 Ноября 2024, 04:08

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Замена MouseDown на Touch...
RebyataYaNeSharyДата: Вторник, 13 Декабря 2016, 20:47 | Сообщение # 1
частый гость
Сейчас нет на сайте
Помогите пожалуйста. Что нужно заменить в коде, чтобы он реагировал не на клик мышкой на компьютере, а на касание на телефоне
Код
void OnMouseDown() {

        MouseDown = true;
    
    }

    void OnMouseUp() {

        MouseDown = false;
    
    }

    void Update () {

        Vector3 Cursor = Input.mousePosition;

        Cursor = Camera.main.ScreenToWorldPoint(Cursor);

        Cursor.z = -3f;

        if (MouseDown)
        {

            this.transform.position = Cursor;

        }
valera_zaДата: Вторник, 13 Декабря 2016, 21:19 | Сообщение # 2
участник
Сейчас нет на сайте
RebyataYaNeShary, ну в общем это
Код

//Метод onmousedown вызывается, когда пользователь нажал кнопку мыши, находясь над GUIElement или коллайдер.
void OnMouseDown() {

    }

Это из справки.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseDown.html?_ga=1.136702832.1144766941.1480872050
ReanДата: Вторник, 13 Декабря 2016, 22:52 | Сообщение # 3
участник
Сейчас нет на сайте
RebyataYaNeShary, вообще, данный код работает и для тачей (если поле Input.simulateMouseWithTouches равно true, а оно по умолчанию равно true). Другое дело, что это не совсем оптимальный вариант, особенно, если в сцене много "тачбл" объектов.
RebyataYaNeSharyДата: Среда, 14 Декабря 2016, 23:21 | Сообщение # 4
частый гость
Сейчас нет на сайте
У меня почему то не работает. А что можно использовать пооптимальнее, не подскажете?
ReanДата: Четверг, 15 Декабря 2016, 04:24 | Сообщение # 5
участник
Сейчас нет на сайте
RebyataYaNeShary,
Цитата RebyataYaNeShary ()
У меня почему то не работает.

А с мышкой работает?
Цитата RebyataYaNeShary ()
А что можно использовать пооптимальнее, не подскажете?

Оптимальней будет работать непосредственно с Touch-классом. Что-то вроде того:
Код

public class TakeInput : MonoBehaviour {

    // Флаг, отвечающий за перетаскивание
    bool isDragging = false;

    void Update ()
    {
  // Проверяем, есть ли нажатия. Если нажатий нет, то выходим из функции.
  if (Input.touchCount < 1)
   return;
  
  // Получаем первое нажатие
  Touch _touch = Input.GetTouch (0);
  // Преобразуем координаты нажатия, делаем рейкаст и получаем коллайдер (если он есть)
  Vector2 touchPos = Camera.main.ScreenToWorldPoint (_touch.position);
  RaycastHit2D ray = Physics2D.Raycast (touchPos, Vector2.zero);
  Collider2D c2d = ray.collider;

  // Проверяем есть ли коллизия с Draggable объектом
  if (c2d != null && c2d.gameObject.tag == "Draggable") {
   // При начале касания - устанавливаем флаг isDragging
   if (_touch.phase == TouchPhase.Began)
    isDragging = true;
   // При завершении или прерывании касания - убираем флаг
   else if (_touch.phase == TouchPhase.Ended || _touch.phase == TouchPhase.Canceled)
    isDragging = false;
   // Если стоит флаг isDragging, то перемещаем объект
   if (isDragging)
    c2d.transform.position = touchPos;
  }
    }
}

Данный скрипт необходимо поместить в какой-нибудь вспомогательный объект, например, обработчик нажатий и ввода, либо какой-нибудь Manager. На крайний случай - на саму камеру. Сами же объекты, которые необходимо перетаскивать, должны иметь какой-нибудь Collider2D и, в данном случае, тэг "Draggable".
В общем, это один из вариантов реализации, скажем, отправная точка - а дальше уже сами: допиливать, дорабатывать и тестировать. :)


Сообщение отредактировал Rean - Четверг, 15 Декабря 2016, 11:10
RebyataYaNeSharyДата: Пятница, 16 Декабря 2016, 22:41 | Сообщение # 6
частый гость
Сейчас нет на сайте
Спасибо большое
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг