Не работает OnDrag, но работает OnMouseDown

175
17 ноября 2018, 01:50

Есть код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class DragAndDropGame : MonoBehaviour, IBeginDragHandler, IDragHandler
{
    Camera MainCamera;
    void Awake()
    {
        MainCamera = Camera.allCameras[0];
        Debug.Log(MainCamera);
    }
    public void OnBeginDrag(PointerEventData eventData)
    {
        Debug.Log("OnBeginDrag");
    }
    public void OnDrag(PointerEventData eventData)
    {
        Vector3 newPos = MainCamera.ScreenToWorldPoint(eventData.position);
        newPos.z = 0;
        transform.position = newPos;
    }
    void OnMouseDown()
    {
        Debug.Log("OnMouseDown");
    }
}

OnMouseDown отрабатывает, а реализации IBeginDragHandler, IDragHandler - нет. В чем может быть дело?

Answer 1

IBeginDragHandler, IDragHandler находятся в пространстве имён UnityEngine.EventSystems и используют для работы EventSystem. Если точнее, то эта система кидает рейкасты, собирает с точек попадания свои интерфейсы и производит вызов.

Метод же OnMouseDown принадлежит MonoBehaviour и реализуется просто через прокидывание рейкаста из всех камер.

Можете посмотреть, в UnityEngine.EventSystems так же присутствуют интерфейс IPointerDownHandler, который является аналогом OnMouseDown.

В вашем случае, если OnMouseDown работает, а интерфейсы нет, то на сцене отсутствует объект класс EventSystem. Нажмите ПКМ в иерархии и создайте его из меню UI->EventSystem

READ ALSO
Префаб возвращает null

Префаб возвращает null

При нажатии кнопки которая в Unity Fire1, ошибка NullReferenceExeption

176
Нажатие на кнопку в overlay'е

Нажатие на кнопку в overlay'е

Пытаюсь сделать какой-никакой overlay для одной игры

201
Пакетная регистрация зависимостей в asp.net core

Пакетная регистрация зависимостей в asp.net core

Внимание! Это краткий перевод вопроса Implement dependency injection outside of Startupcs

195
UnhandledExceptionHandler на C# вне Visual Studio

UnhandledExceptionHandler на C# вне Visual Studio

Есть проектНачальство, спустя более 40к строк кода решило добавить логирование

165