Изменение объекта, который перетаскивает игрок. (IDragHandler и StandaloneInputModule)
Я пытаюсь изменить объект, который перетаскивает игрок.
public class DragInputModule : StandaloneInputModule
{
private static GameObject _draggingObject;
private static GameObject _replaceDraggingObject;
public static void ReplaceDraggingObject(GameObject target)
{
_replaceDraggingObject = target;
}
protected override void ProcessDrag(PointerEventData pointerEvent)
{
}
}
Я сделал свой InputModule в котором переопределил ProcessDrag, но у меня возникла проблема с реализацией метода. Также я нашёл стандартную реализацию этого метода:
if (pointerEvent.IsPointerMoving() || pointerEvent.pointerDrag != null)
{
if (!pointerEvent.dragging && ShouldStartDrag(pointerEvent.pressPosition, pointerEvent.position, eventSystem.pixelDragThreshold, pointerEvent.useDragThreshold))
{
ExecuteEvents.Execute(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
pointerEvent.dragging = true;
}
if (pointerEvent.dragging)
{
if (pointerEvent.pointerPress != pointerEvent.pointerDrag)
{
ExecuteEvents.Execute(pointerEvent.pointerPress, pointerEvent, ExecuteEvents.pointerUpHandler);
pointerEvent.eligibleForClick = false;
pointerEvent.pointerPress = null;
pointerEvent.rawPointerPress = null;
}
ExecuteEvents.Execute(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
}
}
Ответы (1 шт):
Автор решения: Overlord
→ Ссылка
protected override void ProcessDrag(PointerEventData pointerEvent)
{
if (pointerEvent.pointerDrag == null && _replaceDraggingObject != null)
{
pointerEvent.pointerDrag = _replaceDraggingObject;
ExecuteEvents.Execute(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
pointerEvent.dragging = true;
_replaceDraggingObject = null;
}
if (pointerEvent.IsPointerMoving() || pointerEvent.pointerDrag != null)
{
if (!pointerEvent.dragging && ShouldStartDrag(pointerEvent.pressPosition, pointerEvent.position, eventSystem.pixelDragThreshold, pointerEvent.useDragThreshold))
{
ExecuteEvents.Execute(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.beginDragHandler);
pointerEvent.dragging = true;
}
if (pointerEvent.dragging)
{
if (pointerEvent.pointerPress != pointerEvent.pointerDrag)
{
ExecuteEvents.Execute(pointerEvent.pointerPress, pointerEvent, ExecuteEvents.pointerUpHandler);
pointerEvent.eligibleForClick = false;
pointerEvent.pointerPress = null;
pointerEvent.rawPointerPress = null;
}
ExecuteEvents.Execute(pointerEvent.pointerDrag, pointerEvent, ExecuteEvents.dragHandler);
}
}
}