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