Есть код:
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
- нет. В чем может быть дело?
IBeginDragHandler, IDragHandler
находятся в пространстве имён UnityEngine.EventSystems
и используют для работы EventSystem
. Если точнее, то эта система кидает рейкасты, собирает с точек попадания свои интерфейсы и производит вызов.
Метод же OnMouseDown
принадлежит MonoBehaviour
и реализуется просто через прокидывание рейкаста из всех камер.
Можете посмотреть, в UnityEngine.EventSystems
так же присутствуют интерфейс IPointerDownHandler
, который является аналогом OnMouseDown
.
В вашем случае, если OnMouseDown
работает, а интерфейсы нет, то на сцене отсутствует объект класс EventSystem
. Нажмите ПКМ в иерархии и создайте его из меню UI->EventSystem
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Внимание! Это краткий перевод вопроса Implement dependency injection outside of Startupcs
Есть проектНачальство, спустя более 40к строк кода решило добавить логирование