unity 背包Item拖拉

UGUI

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class Item : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{
    public GameObject draggingItem;
    private RectTransform itemRect;
    public Image itemImage;
    private Transform oldSlot;
    public int itemID;
    public Text itemCount;
    void Awake()
    {
        itemImage = GetComponent<Image>();
    }
	// Use this for initialization
	void Start () {
        draggingItem = GameObject.FindGameObjectWithTag("DraggingItem");
	    itemRect = GetComponent<RectTransform>();
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    public void OnBeginDrag(PointerEventData eventData)
    {
        oldSlot = transform.parent;
        transform.SetParent(draggingItem.transform);
        SetDraggedPosition(eventData);
        itemImage.raycastTarget = false;
    }

    public void OnDrag(PointerEventData eventData)
    {
        SetDraggedPosition(eventData);
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        Transform newSlot = null;
        if (eventData.pointerEnter == null )
        {
            transform.SetParent(oldSlot);
            transform.localPosition = Vector3.zero;
            itemImage.raycastTarget = true;
            return;
        }
        else
        {
            newSlot = eventData.pointerEnter.transform;
        }
        
        if(newSlot.tag.Equals("Slot"))
        {
            transform.SetParent(newSlot);
            transform.localPosition = Vector3.zero;
            
        }
        else if (newSlot.tag.Equals("Item"))
        {
            transform.SetParent(newSlot.parent);
            transform.localPosition = Vector3.zero;
            newSlot.SetParent(oldSlot);
            newSlot.localPosition = Vector3.zero;
        }
        else
        {
            transform.SetParent(oldSlot);
            transform.localPosition = Vector3.zero;
        }
        itemImage.raycastTarget = true;
    }

    private void SetDraggedPosition(PointerEventData eventData)
    {
        Vector3 worldPos;
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(itemRect, eventData.position, eventData.pressEventCamera, out worldPos))
        {
            itemRect.position = worldPos;
        }
    }

    public void SetItemCount(int num)
    {
        int intCount = int.Parse(itemCount.text);
        intCount += num;
        itemCount.text = intCount.ToString();
        if(intCount <= 0)
        {
            Destroy(gameObject);
            Tooltip.instance.Hide();
        }
    }

    public void OnPointerEnter (PointerEventData eventData)
    {
        Tooltip.instance.Show(this, KnapsackManager.instance.GetItemByID(itemID), eventData);
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Tooltip.instance.Hide();
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        if(eventData.button == PointerEventData.InputButton.Left)
        {
            Slot slot = GetComponentInParent<Slot>();
            if(slot != null)
            {
                KnapsackManager.instance.UseItem(slot.slotID);
            }
        }
    }
}

NGUI

using UnityEngine;
using System.Collections;

public class InventoryItem : MonoBehaviour
{
    [HideInInspector]
    public GameObject draggingItem;
    public UISprite itemIcon;
    public UILabel itemCount;
    [HideInInspector]
    public Transform oldSlot;
    private Collider itemCollider;
    public int itemID;
    public int count = 1;//叠加数量
	// Use this for initialization
	void Start () {
	    itemCollider = GetComponent<BoxCollider>();
        draggingItem = GameObject.FindGameObjectWithTag("DraggingItem");
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    public void OnDragStart()
    {
        oldSlot = transform.parent;
        transform.SetParent(draggingItem.transform);
        itemCollider.enabled = false;

        NGUITools.MarkParentAsChanged(gameObject);
    }

    public void OnDrag(Vector2 delta)
    {
        transform.localPosition += (Vector3)delta;
    }

    public void OnDragEnd()
    {
        Transform newSolt = UICamera.hoveredObject.transform;
        if(newSolt.tag == "Slot")
        {
            transform.SetParent(newSolt);
            transform.localPosition = Vector3.zero;
        }
        else if(newSolt.tag == "InventoryItem")
        {
            transform.SetParent(newSolt.parent);
            transform.localPosition = Vector3.zero;
            newSolt.SetParent(oldSlot);
            newSolt.localPosition = Vector3.zero;
        }
        else if(newSolt.tag == "EquipmentSlot")
        {
            EquipmentSlot equipmentSlot = newSolt.GetComponent<EquipmentSlot>();
            ItemBase itemBase = ItemManager.instance.GetData(itemID);
            if (itemBase.itemType == ItemType.Equip && ((ItemEquipment)itemBase).itemJob == PlayerInfo.instance.playerIndex && equipmentSlot.itemPart == ItemManager.instance.GetItemPartByID(itemID))
            {
                    EquipmentManager.instance.AddItem(itemID);
                    Destroy(draggingItem.transform.GetChild(0).gameObject);
            }
            else
            {
                transform.SetParent(oldSlot);
                transform.localPosition = Vector3.zero;
            }
        }
        else if (newSolt.tag == "EquipmentItem")//换装(已经有装备)
        {
            EquipmentSlot equipmentSlot = newSolt.parent.GetComponent<EquipmentSlot>();
            ItemBase itemBase = ItemManager.instance.GetData(itemID);
            if (itemBase.itemType == ItemType.Equip && ((ItemEquipment)itemBase).itemJob == PlayerInfo.instance.playerIndex && equipmentSlot.itemPart == ItemManager.instance.GetItemPartByID(itemID))
            {
                EquipmentItem oldItem = newSolt.GetComponent<EquipmentItem>();
                InventoryManager.instance.AddItem(oldItem.itemID, 1);
                EquipmentManager.instance.RemoveItem(oldItem.itemID);

                EquipmentManager.instance.AddItem(itemID);
                Destroy(draggingItem.transform.GetChild(0).gameObject);
                
            }
            else
            {
                transform.SetParent(oldSlot);
                transform.localPosition = Vector3.zero;
            }
        }
        else
        {
            transform.SetParent(oldSlot);
            transform.localPosition = Vector3.zero;
        }
        itemCollider.enabled = true;
    }

    public void SetItemCount(int num)
    {
        count += num; 
        itemCount.text = count.ToString();
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值