uGUI touch

Графический интерфейс пользователя

uGUI touch

Сообщение Woland 21 янв 2015, 14:53

Собственно, в соседней теме обсуждается, как сделать так, чтобы гуи отлавливала, когда мышка находится на гуем. Как сделать так, чтобы гуишка отлавливала нажатие пальцем? А то у меня персонаж ходит сквозь нажатие на инвентарь(
Синтаксис:
Используется csharp
if(EventSystem.current.IsPointerOverGameObject())
                {
                        if(Move.canMove)
                        Move.canMove=false;
                }
                else
                {
                        if(!Move.canMove)
                        Move.canMove=true;
                }


Не работает, работает только для мышки
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: uGUI touch

Сообщение Zentner 22 янв 2015, 14:30

чтоб не срабатывало ничего лишнего над Гуи, попробуйте так:

Синтаксис:
Используется csharp
        if (!UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
Zentner
UNец
 
Сообщения: 23
Зарегистрирован: 08 янв 2015, 15:54

Re: uGUI touch

Сообщение Woland 23 янв 2015, 13:49

Пробовал
Синтаксис:
Используется csharp
апдейт
{
int i = 0;
                while (i < Input.touchCount) {
                                if(EventSystem.current.IsPointerOverGameObject(Input.GetTouch(i).fingerId))
                                {
                                        Debug.Log("ASDASD");
                                }
                        ++i;
                }
}


Не выводится ничего вообще
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: uGUI touch

Сообщение Zentner 23 янв 2015, 18:00

http://docs.unity3d.com/460/Documentation/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html

у вас
Синтаксис:
Используется csharp
 EventSystem.current.IsPointerOverGameObject

а надо
Синтаксис:
Используется csharp
UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject


вот похожий по сути вопрос, и такой же ответ:
http://answers.unity3d.com/questions/822273/how-to-prevent-raycast-when-clicking-46-ui.html
Zentner
UNец
 
Сообщения: 23
Зарегистрирован: 08 янв 2015, 15:54

Re: uGUI touch

Сообщение Woland 28 янв 2015, 11:54

Я подключил библиотеку, все норм) Если бы нет, то мой код вообще бы не компилировался. Решение такое, мб кому пригодится
Синтаксис:
Используется csharp
using UnityEngine.UI;
GraphicRaycaster uiRaycaster;
void Start()
{
uiRaycaster = transform.root.gameObject.GetComponent<GraphicRaycaster>();
}



void Update()
{
while (i < Input.touchCount) {
                        if(IsPointerOverUIObject(Input.GetTouch(i).position))
                        {
                                if(Move.canMove)
                                        Move.canMove=false;
                        }
                        else
                        {
                                if(!Move.canMove)
                                        Move.canMove=true;
                        }

                        ++i;
                }
        }


        private bool IsPointerOverUIObject(Vector2 screenPosition) {
                PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);
                eventDataCurrentPosition.position = screenPosition;
                List<RaycastResult> results = new List<RaycastResult>();
                uiRaycaster.Raycast(eventDataCurrentPosition, results);
                return results.Count > 0;
        }
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: uGUI touch

Сообщение Burlakovmax 03 мар 2015, 12:54

Оо поздно тему нашел:) С такой же байдой маюсь...

Синтаксис:
Используется csharp
if (Input.GetMouseButtonDown(0) && !EventSystemManager.currentSystem.IsPointerOverEventSystemObject(){
// Non-UI mouse click
}


Только для Дестопов будет работать...

А вот что пишут для мобилок:

Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.EventSystems;

public class PointerDownTracker : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
public static bool pointerDown = false;

public void OnPointerDown(PointerEventData eventData)
{
    pointerDown = true;
}

public void OnPointerUp(PointerEventData eventData)
{
    pointerDown = false;
}
}


Нужно этот скрипт повесить например на кнопку, и как я понял проверять в своих скриптах PointerDown вроде...не тестировал еще...
Burlakovmax
UNец
 
Сообщения: 16
Зарегистрирован: 25 фев 2015, 19:11

Re: uGUI touch

Сообщение Burlakovmax 03 мар 2015, 13:33

Проверил второй вариант, то же самое...

На компе все отлично, на андройде не пашет x_x
Burlakovmax
UNец
 
Сообщения: 16
Зарегистрирован: 25 фев 2015, 19:11


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3