Como detectar GameObjects múltiplos / sobrepostos com o EventSystem?

O que eu tento alcançar: A escova de dentes deve aparecer onde quer que o usuário clica dentroBoxCollider A, incluindo espaço dentroBoxCollider B. Mas aparentemente clicando dentroB não mostrará a escova de dentes (o OnPointerDown não está sendo acionado).

O que eu tentei: Alterando a ordem das camadas.

A escova de dentes é mostrada depois que o usuário clica dentro do colisor de caixaA, mas se o usuário clicar dentro do colisor de caixaB- a escova de dentes não aparecerá, o que significaOnPointerDown não é acionado.

Eu acho que é por causa da sobreposição de umBoxCollider2D dentro de outroBoxCollider2D. No meu casoB dentroA, Presumo que esse seja o culpado, mas não tenho idéia de como resolvê-lo ou se talvez houver outro método para implementarOnPointerDown?

estou usandoPerspective Câmera. mas nesta cena todos os elementos estão no mesmoz position que é 0. É possível disparar o evento IPointerHander em todos os respectivosBoxCollider2D ?

DragableObject.cs

Este script está anexado à escova de dentes. oBoxCollider2D A também pertence à escova de dentes.

public void OnPointerDown(PointerEventData eventData)
{
    Debug.Log("pointer down");

    if (GetComponent<DragableObject>() == null)
        return;

    currentObject = GetComponent<DragableObject>();

    MeshRenderer renderer = GetComponent<MeshRenderer>();

    if (ShowOnTouch)
        ShowObject();

    // Store original state
    originalPosition = transform.position;
    originalOrderLayer = renderer.sortingOrder;
    // Snap to mouse
    Vector3 newPos = cam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 30));
    newPos.z = 30;
    transform.position = newPos;

    if (BringToFront)
    {
        if (renderer != null)
        {
            renderer.sortingOrder = 90;
        }
    }

    ObjectActive.Invoke();
}
TargetListener.cs

Este script está anexado aBoxCollider2D B.

public void OnPointerDown(PointerEventData eventData)
{
    for (int i = 0; i < Affectors.Count; i++) 
    {
        if (Affectors [i] == DragableObject.currentObject)
        {
            DragableObject.currentObject.OnEnterTarget(transform);

            ITriggerEffect[] iTrigger = GetComponents<ITriggerEffect>();

            for (int j = 0; j < iTrigger.Length; j++) 
            {
                Debug.Log("iTrigger enter");
                Debug.Log(iTrigger [j]);
                iTrigger [j].Execute(eventData, PointerState.Down);
            }
        }
        else
            continue;
    }
}

Se eu clicar emA a escova de dentes aparecerá, exceto quando eu clicar dentroB. Aqui o log de depuração.

Isto é oBoxCollider2D A está anexado, que é o*Toothbrush em conjunto com odragable.cs roteiro.

ATUALIZAÇÃO: Graças a outras pessoas que respondem, o problema se torna mais claro para mim. Abaixo estáBoxCollider2D A eBoxCollider2D B. Ambos têm script que tem a maioria dosOnPointerHander. Como faço para garantir que todosOnPointerHandler é acionado nos respectivosBoxCollider2D ?

Problemas que estou tendo:

OnPointerExit emA é acionado quando meu ponteiro entraB.se clicar dentroB ,OnPointerDown acionado apenas emB mas nãoA

questionAnswers(2)

yourAnswerToTheQuestion