UGUI背包拖拽功能

using System.Collections;


using System.Collections.Generic;


using UnityEngine;
using UnityEngine.UI;


using UnityEngine.EventSystems;


using System;


public class TuoZhuai : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{


    Vector3 originPos;


     Vector3 setoff;//鼠标点击的位置和图片中心点的距离
     Transform canvas;//画布
     Transform originParent;//
     CanvasGroup canvasGroup;
    Transform trans;


    void Start()
    {
        canvas = GameObject.Find("KnapsackUI").transform;//获取画布
        canvasGroup = GetComponent<CanvasGroup>();//
    }




    public void OnBeginDrag(PointerEventData eventData)
    {
        originParent = transform.parent;//记录父物体
        transform.SetParent(canvas);
        originPos = transform.position;
        setoff = Input.mousePosition - originPos;//鼠标与图片中心点的距离
        canvasGroup.blocksRaycasts = false;//不让拖拽物体遮挡射线
    }


    public void OnDrag(PointerEventData eventData)
    {
        transform.position = Input.mousePosition - setoff;//拖拽中相差位置不变
    }


    public void OnEndDrag(PointerEventData eventData)
    {


        if (eventData.pointerEnter == null)//如果点击位置为空
        {


            Dictionary_Bag.DeleteItem(this.name);
            Destroy(this .gameObject );


            
            return;
        }
        else
        {
            trans = eventData.pointerEnter.transform;//记录点击时的格子对象
            print(trans.name);
           
        }
        print("放开时格子的名字"+trans.name);
        switch (trans.tag)
        {
            
            case "BagGrid"://武器
                string spriteName= transform.GetComponent<Image>().sprite.name;
                
                if (BagDemo_2.Bag.ContainsKey(spriteName) && BagDemo_2.Bag[spriteName].ID == 0 )
                {
                    if (eventData.pointerEnter.transform.childCount != 0)
                    {
                        Transform temp2;
                        temp2 = transform.parent;//记录当前的父对象
                        transform.SetParent(trans.parent);
                        trans.parent = originParent;
                        trans.localPosition = Vector3.zero;
                    }
                    else
                    {
                        transform.SetParent(trans);                        
                    }
                }else
                {
                    transform.position = originPos;//当前位置返回初始位置
                    transform.SetParent(originParent);//父物体返回
                    canvasGroup.blocksRaycasts = true;//开始阻挡射线
                }
                break;
            case "GridPanel"://格子空白处
                transform.position = originPos;//当前位置返回初始位置
                transform.SetParent(originParent);//父物体返回
                canvasGroup.blocksRaycasts = true;//开始阻挡射线
                break;
            case "Grid"://格子
                transform.SetParent(trans);
                break;
            case "Item"://图片
                Transform temp;
                temp = transform.parent;//记录当前的父对象
                transform.SetParent(trans.parent );
                trans.parent = originParent;
                trans.localPosition = Vector3.zero;
                break;
            default:
                transform.SetParent(originParent);//返回到初始父对象
                break;
        }
        print("放开时检测到格子的tag---"+trans.tag);
        transform.localPosition = Vector3.zero;//初始化图片坐标
        canvasGroup.blocksRaycasts = true;//开始遮挡射线


    }
}


/**********************************简易版背包******************************************/
 
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using UnityEngine.EventSystems;


public class TuoZhuai : MonoBehaviour,IBeginDragHandler,IDragHandler,IEndDragHandler{
    CanvasGroup thisGroup;//阻挡射线组件
    Transform parentTransform;//开始拖拽时的父物体位置
    Vector3  point;//距离差
    Transform canvas;//画布
    Transform endTransformobj;//拖拽结束时的物体的位置
    //Transform temp;//暂时存储位置
    void Start()
    {
        canvas = GameObject.Find("Panel").transform;
        thisGroup = GetComponent<CanvasGroup>();
    }


    public void OnBeginDrag(PointerEventData eventData)
    {
        parentTransform= this.transform.parent;//记录父物体
        point = Input.mousePosition - this.transform.position;//记录鼠标与图片之间的间距
        this.transform.SetParent(canvas);//修改图片父物体
        thisGroup.blocksRaycasts = false;//图片不再阻挡射线
        
    }


    public void OnDrag(PointerEventData eventData)
    {
        this.transform.position = Input.mousePosition - point;//让图片和鼠标之间保持一定间距
    }


    public void OnEndDrag(PointerEventData eventData)
    {
        //如果不是格子也不是武器  就删除
        if(eventData .pointerEnter.transform .tag !="item"&& eventData.pointerEnter.transform.tag != "grid")
        {
            Destroy(this.gameObject);
        }else
        {
            endTransformobj = eventData.pointerEnter.transform;// *获取射线击中的物体对象
            switch (endTransformobj.tag )
            {
                case "item":
                     
                    transform.SetParent(endTransformobj.parent);//修改他的父对象
                    
                    thisGroup.blocksRaycasts = true;//开始阻挡射线


                    endTransformobj .SetParent ( parentTransform);//修改被交换的对象的父物体
                    endTransformobj.localPosition  = Vector3.zero;//初始化位置
                    break;
                case "grid":
                    transform.SetParent(endTransformobj);//将自身父物体修改为检测到的格子


                    thisGroup.blocksRaycasts = true;//开始阻挡射线
                    break;
                
            }
            transform.localPosition = Vector3.zero;//初始化位置
        }
         
    }


}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值