Как заблокировать прохождение RayCast через слой UI?

Программирование на Юнити.

Как заблокировать прохождение RayCast через слой UI?

Сообщение RokkArt 23 май 2017, 10:58

В общем есть небольшая загвоздка с которой столкнулся и не могу найти решения, вродь не сложное и крутиться реализация на уме но все не то, мож кто направит как говриться на путь истенный. Суть проблемы есть скрипт управления персонажем с видом сверху. Нужно чтобы при Touch на андроиде лучь не проходил через слой UI
Синтаксис:
Используется csharp
void Update ()
       
               


                if(Physics.Raycast(gameObject.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition), out hitinfo))
                {

//====не годится   ===============================
    if (EventSystem.current.IsPointerOverGameObject())
        return;
//===============================================


                        if(Input.GetMouseButtonDown(0))
                        {

                               

                                PointerEventData pointer = new PointerEventData(EventSystem.current);
                                pointer.position = Input.mousePosition;

                                List<RaycastResult> raycastResults = new List<RaycastResult>();
                                EventSystem.current.RaycastAll(pointer, raycastResults);

                                if(raycastResults.Count > 0)
                                {
                                        foreach(var go in raycastResults)
                                        {  
                                                Debug.Log(go.gameObject.name,go.gameObject);    
                              //====здесь нужно добавить блокировку прохождения луча если тыкнули по UI  
                                        }
                                }

                               

                                if(hitinfo.collider.tag == groundTagName)
                                {

                                        PickToMoove();
                                }



                                if (hitinfo.transform.tag == "Box") {
                                       
                                       
                                        }

                               



[curved_hands]
RokkArt
UNец
 
Сообщения: 5
Зарегистрирован: 17 фев 2017, 21:03

Re: Как заблокировать прохождение RayCast через слой UI?

Сообщение Tolking 23 май 2017, 12:35

проверяй прежде чем рейкаст делать...
https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2714
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Как заблокировать прохождение RayCast через слой UI?

Сообщение RokkArt 25 май 2017, 13:24

Или я чет не так делаю но если делаю так
Синтаксис:
Используется csharp
 if(Physics.Raycast(gameObject.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition), out hitinfo))
                {

if (Input.GetMouseButtonDown(0))
        {
           
            if (EventSystem.current.IsPointerOverGameObject())
            {
                Debug.Log("Clicked on the UI");
            }else{
                              if(hitinfo.collider.tag == groundTagName)
                                {

                                        Debug.Log("Clicked on ground");
                                }

}
}
}

 



в любом месте где не ткну всюду Clicked on the UI что не так?
RokkArt
UNец
 
Сообщения: 5
Зарегистрирован: 17 фев 2017, 21:03

Re: Как заблокировать прохождение RayCast через слой UI?

Сообщение RokkArt 25 май 2017, 13:51

Если я все верно понял с справки
Синтаксис:
Используется csharp
 EventSystem.current.IsPointerOverGameObject ()
возвращает true, когда курсор над элементом UI .У меня же всюду true немогу понять почему
RokkArt
UNец
 
Сообщения: 5
Зарегистрирован: 17 фев 2017, 21:03

Re: Как заблокировать прохождение RayCast через слой UI?

Сообщение RokkArt 25 май 2017, 14:18

Всем спасибо за внимание разобрался сам :) ( причина : на камере висел скрипт Physics Raycaster с закладки Event удалил его и все заработало)
[curved_hands] =)) пора на пенсию
RokkArt
UNец
 
Сообщения: 5
Зарегистрирован: 17 фев 2017, 21:03


Вернуться в Скрипты

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

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