Как заставить объект щелкнуть мышью, но не тогда, когда он находится за кнопкой, которая была нажата? - PullRequest
2 голосов
/ 17 июня 2019

Я использую этот код, чтобы щелкнуть мышью по объекту

void Update() {
  if (Input.GetMouseButtonUp(0)) {
    RaycastHit hit;
    Ray ray = camera.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, out hit)) {
      Transform objectHit = hit.transform;
    }
  }
}

Этот код работает, даже когда я нажимаю кнопку и не хочу щелкать объект, находящийся за кнопкой. Как этого избежать?

Ответы [ 3 ]

1 голос
/ 17 июня 2019

В Unity есть простое решение.Вам нужно использовать эту функцию, она возвращает true, если указатель мыши находится над элементом пользовательского интерфейса, например кнопка.

EventSystem.current.IsPointerOverGameObject()

Примерно так:

void Update()
{
    if (Input.GetMouseButtonUp(0) && !EventSystem.current.IsPointerOverGameObject())
    {
        // UI wasn't clicked
        ...
    }
}
1 голос
/ 18 июня 2019

Вместо этого вы можете реализовать интерфейсы IPointerDownHandler и IPointerUpHandler на целевом объекте, на который вы хотите щелкнуть, например,

public class Interactable3D : MonoBehaviour, IPointerUpHandler
{
    public void OnPointerDown(PointerEventData pointerEventData)
    {
        Debug.Log(name + "Game Object Click in Progress");
    }

    public void OnPointerUp(PointerEventData pointerEventData)
    {
        // Whatever should happen
    }
}

Используйте интерфейс IPointerUpHandler для обработки ввода указателя вверх с помощью обратных вызовов OnPointerUp.Убедитесь, что в сцене есть EventSystem, чтобы разрешить обнаружение щелчков.Для обнаружения щелчков на объектах GameObject, не относящихся к пользовательскому интерфейсу, убедитесь, что PhysicsRaycaster присоединен к Camera.

И, конечно, для него все еще требуется наличие Collider.

0 голосов
/ 17 июня 2019

Вы можете использовать маску слоя, вы можете назначить игровой объект, который вы не хотите нажимать, слою игнорирования raycast.

Подробнее об этом можно прочитать здесь: Документация Unity - LayerMask

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...