游戏中的背包系统的一个功能,将物品A从b方格拖动到c方格,当放开鼠标时,此时如果物品A跟c方格有交集,则物品A自动吸附到c方格内。
代码1:ItemSlot.cs
public class ItemSlot : MonoBehaviour, IDropHandler {
public void OnDrop(PointerEventData eventData) {
DragHandler.itemBeingDragged.transform.SetParent(transform);
DragHandler.itemBeingDragged.transform.localPosition = Vector3.zero;
}
}
这里注意要实现IDropHandler接口,跟底下的DragHandler类实现IDragHandler接口不同,一个是Drop,一个是Drag。
代码2:ItemSlot.cs
public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler {
RectTransform canvasRectTransform;
Transform beginParent;
public void Awake()
{
Canvas canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
canvasRectTransform = canvas.transform as RectTransform;
}
public void OnBeginDrag(PointerEventData eventData) {
itemBeingDragged = transform;
beginParent = transform.parent;
transform.SetParent(tempParent);
GetComponent<Image>().raycastTarget = false;
}
public void OnDrag(PointerEventData eventData)
{
Vector2 pos;
if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, Input.mousePosition, canvas.worldCamera, out pos))
{
this.GetComponent<RectTransform>().anchoredPosition = pos;
}
}
public void OnEndDrag(PointerEventData eventData)
{
if(transform.parent== tempParent) {
transform.parent = beginParent;
transform.localPosition = Vector3.zero;
}
GetComponent<Image>().raycastTarget = true;
itemBeingDragged = null;
}
}