Unity touch / мышь сталкиваются вместо MouseDown () - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть спрайт, который в данный момент обнаруживает щелчок мышью по нему.

Однако мне действительно нужно определить, когда палец или мышь касается или перемещается по спрайту, потому что событие щелчка пальцем / мышью произойдет где-то еще на экране, а не поверх спрайта.

public class Hand : MonoBehaviour
{

    private void OnMouseDown()
    {
        if (Input.GetMouseButtonDown(0))
        {
            this.transform.gameObject.SetActive(false);
        }
    }
}

Обновление: я пытался обнаружить касание спрайта, и мышь не работала, но я не нажимал кнопку.Я могу удалить && Input.GetMouseButtonDown(0), и он будет работать, если мышь переместится, но я хочу, чтобы и мышь / палец над спрайтом и нажата вниз.

private void Update()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, 1000) && Input.GetMouseButtonDown(0))
        hit.collider.GetComponent<Button>().onClick.Invoke();
}

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Существует 2 возможных решения:

Во-первых: вместо использования спрайтов используйте кнопку и назначьте ее для холста мирового пространства, в этом случае касание должно работать, если вы назначаете камеру события canva основной камере.

2-й: Если вы просто хотите использовать спрайты, назначьте ему коллайдер и используйте raycast

Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position); 
           if (Physics.Raycast(ray,out hit,1000))
                hit.collider.gameobject.GetComponent<Button>.onClick().Invoke();

Редактировать: приведенный выше код будет работать, если к кнопке присоединен компонент кнопки.спрайт.если нет, просто назовите что-то вроде этого

if(hit.collider.gameobject.GetComponenet<Sprite>())
   DoWhateverYouWant()
0 голосов
/ 19 сентября 2019

Используйте интерфейсы EventSystem для обнаружения любого вида взаимодействия мыши с элементами пользовательского интерфейса.

Здесь перечислены интерфейсы EventSystem здесь .

Например, если вы хотите обнаружитькогда указатель мыши находится над спрайтом, вы добавляете скрипт в объект спрайта следующим образом:

using UnityEngine.EventSystems;
using UnityEngine;

public class MouseOverHandler: MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
   public void OnPointerEnter(PointerEventData data){
        Debug.Log("MouseEnter");
   }

   public void OnPointerExit(PointerEventData data){
        Debug.Log("MouseExit");
   }
}

Обратите внимание, что EventSystem работает с raycaster на холсте связанного спрайта.Таким образом, если спрайты располагаются друг над другом, они могут блокировать радиопередачи, и поэтому событие PointEnter запускается только на самом верхнем спрайте

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