Drag & Drop юнити: не могу перетаскивать объект больше чем один раз
Делаю систему Drag & Drop на Unity. Есть скрипт Slot в котором указывается предмет находящийся в слоте, иконка и т.д. :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Slot : MonoBehaviour, IPointerDownHandler, IBeginDragHandler, IDragHandler, IEndDragHandler, IDropHandler
{
public int _hotSelect;
public KeyCode useButton = KeyCode.F;
//private Drop dropScript;
public GameObject dragObj;
public bool isFull;
public bool isCompFull;
public bool isSelected;
public Item _item;
public Image icon;
public Sprite empty;
public int count;
public Text numText;
private void Start()
{
//dropScript = GetComponent<Drop>();
}
public void Update()
{
if (count <= 1) numText.text = "";
else numText.text = count.ToString();
if (count >= 12)
{
numText.text = "12";
isCompFull = true;
}
if(count < 12) isCompFull = false;
if(count < 1)
{
isFull = false;
icon.sprite = empty;
_item = null;
}
if(count > 0) icon.sprite = _item.Icon;
}
public void OnPointerDown(PointerEventData eventData)
{
//dropScript._sel();
dragObj.GetComponent<DragAndDrop>().bdSlot = this.GetComponent<Slot>();
}
public void OnBeginDrag(PointerEventData eventData)
{
dragObj.GetComponent<DragAndDrop>()._BeginDrag();
}
public void OnDrag(PointerEventData eventData)
{
dragObj.GetComponent<DragAndDrop>()._Drag();
}
public void OnEndDrag(PointerEventData eventData)
{
dragObj.GetComponent<DragAndDrop>()._EndDrag();
}
public void OnDrop(PointerEventData eventData)
{
dragObj.GetComponent<DragAndDrop>().bdSlot._item = _item;
dragObj.GetComponent<DragAndDrop>().bdSlot.count = count;
_item = dragObj.GetComponent<DragAndDrop>().dragItem;
count = dragObj.GetComponent<DragAndDrop>().dragCount;
dragObj = GameObject.FindGameObjectWithTag("DragObj");
}
}
Также есть визуализация перетаскиваемого объекта(dragObj) со скриптом DragAndDrop:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class DragAndDrop : MonoBehaviour
{
public int dragCount;
public Item dragItem;
public Sprite dragIcon;
public Slot bdSlot;
private CanvasGroup canvasGroup;
public void Start()
{
bdSlot = GetComponent<Slot>();
this.GetComponent<Image>().color = new Color(255, 255, 255, 0);
canvasGroup = GetComponent<CanvasGroup>();
}
public void _BeginDrag()
{
canvasGroup.blocksRaycasts = false;
dragIcon = bdSlot.icon.sprite;
dragItem = bdSlot._item;
dragCount = bdSlot.count;
this.GetComponent<Image>().sprite = dragIcon;
this.GetComponent<Image>().color = new Color(255, 255, 255, 255);
bdSlot.count = 0;
}
public void _Drag()
{
this.transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1));
}
public void _EndDrag()
{
this.GetComponent<Image>().color = new Color(255, 255, 255, 0);
dragIcon = null;
dragItem = null;
dragCount = 0;
this.GetComponent<Image>().sprite = dragIcon;
canvasGroup.blocksRaycasts = true;
}
}
Всё работает замечательно, но я не могу перетащить один объект больше чем один раз подряд. Если я например перетащил объект топора, я смогу перетащить его ещё раз только после того как перетащу любой другой предмет. Почему так?
Ответы (1 шт):
Автор решения: Quarky Programs
→ Ссылка
Исправил: оказывается в Drag&Drop в методе EndDrag после
canvasGroup.blocksRaycasts = true;
надо было поставить
canvasGroup.blocksRaycasts = false;
..................