Страница 1 из 1

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

СообщениеДобавлено: 23 май 2017, 10:58
RokkArt
В общем есть небольшая загвоздка с которой столкнулся и не могу найти решения, вродь не сложное и крутиться реализация на уме но все не то, мож кто направит как говриться на путь истенный. Суть проблемы есть скрипт управления персонажем с видом сверху. Нужно чтобы при 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]

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

СообщениеДобавлено: 23 май 2017, 12:35
Tolking
проверяй прежде чем рейкаст делать...
https://docs.unity3d.com/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html

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

СообщениеДобавлено: 25 май 2017, 13:24
RokkArt
Или я чет не так делаю но если делаю так
Синтаксис:
Используется 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 что не так?

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

СообщениеДобавлено: 25 май 2017, 13:51
RokkArt
Если я все верно понял с справки
Синтаксис:
Используется csharp
 EventSystem.current.IsPointerOverGameObject ()
возвращает true, когда курсор над элементом UI .У меня же всюду true немогу понять почему

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

СообщениеДобавлено: 25 май 2017, 14:18
RokkArt
Всем спасибо за внимание разобрался сам :) ( причина : на камере висел скрипт Physics Raycaster с закладки Event удалил его и все заработало)
[curved_hands] =)) пора на пенсию