? Поддерживает ли реализация OnPointerHandler? или, может быть, я должен использовать другой метод?
я хочу добиться: зубная щетка должна появляться там, где пользователь нажимает внутриBoxCollider
A
, включая пространство внутриBoxCollider
B
, Но, видимо, щелкнув внутриB
не будет показывать зубную щетку (OnPointerDown не запускается).
Что я пробовал: Изменение порядка слоев.
Зубная щетка показана после того, как пользователь щелкнул внутри коллайдераA
, но если пользователь щелкает внутри поля коллайдераB
- зубная щетка не появится, а это значит,OnPointerDown
не срабатывает.
Я думаю, что это из-за совпадения одногоBoxCollider2D
внутри другогоBoxCollider2D
, В моем случаеB
внутриA
Я предполагаю, что это виновник, но я понятия не имею, как ее решить или, может быть, есть другой метод для реализацииOnPointerDown
?
Я используюPerspective
камера. но в этой сцене все элементы в одномz position
который равен 0. Можно ли вызвать событие IPointerHander в каждом соответствующемBoxCollider2D
?
Этот скрипт прикреплен к зубной щетке.BoxCollider2D
А также принадлежит зубной щетке.
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Этот скрипт прикреплен кBoxCollider2D
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;
}
}
Если я нажму наA
зубная щетка появится, кроме тех случаев, когда я нажимаю внутриB
, Здесь журнал отладки.
ЭтоBoxCollider2D
А прикреплен к, который является*Toothbrush
сам вместе сdragable.cs
скрипт.
ОБНОВЛЕНИЕ: Благодаря другим, кто отвечает, проблема стала более ясной для меня. НижеBoxCollider2D
А иBoxCollider2D
Б. У обоих из них есть сценарий, который имеет большинствоOnPointerHander
, Как мне убедиться, что всеOnPointerHandler
срабатывает на соответствующемBoxCollider2D
?.
Проблемы, которые у меня возникают:
OnPointerExit наA
срабатывает при входе моего указателяB
.если нажать внутриB
,OnPointerDown
только срабатывает наB
но нетA