| Замена 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 |  | частый гость Сейчас нет на сайте | Спасибо большое |  |  |  |  |