Ugui中的图片拖拽

来源:互联网 发布:php use找不到 编辑:程序博客网 时间:2024/05/16 06:15
using UnityEngine;using System.Collections;using UnityEngine.UI;using UnityEngine.EventSystems;public class UGUIForDrag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler, IDropHandler{    //创建一个Gameobject作为拖拽时被拖拽对象的代替品    private GameObject drag_icon;    //该物体是否可以进行拖拽    public bool isCanDrug;    //匹配信息    public string matching;    /// <summary>    /// 拖拽时为新生成的拖拽图片进行位置更新    /// </summary>    /// <param name="eventData"></param>    public void OnDrag(PointerEventData eventData)    {        if (!isCanDrug) return;        //并将拖拽时的坐标给予被拖拽对象的代替品        Vector3 pos;        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(drag_icon.GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out pos))        {            drag_icon.transform.position = pos;        }    }    /// <summary>    /// 拖拽图片初始    /// </summary>    /// <param name="eventData"></param>    public void OnBeginDrag(PointerEventData eventData)    {        if (!isCanDrug) return;        //代替品实例化        drag_icon = new GameObject("icon");        drag_icon.transform.SetParent(GameObject.Find("Canvas").transform, false);        drag_icon.AddComponent<RectTransform>();        var img = drag_icon.AddComponent<Image>();        img.sprite = this.GetComponent<Image>().sprite;        //防止拖拽结束时,代替品挡住了准备覆盖的对象而使得 OnDrop() 无效        CanvasGroup group = drag_icon.AddComponent<CanvasGroup>();        group.blocksRaycasts = false;    }    /// <summary>    /// 拖拽结束    /// </summary>    /// <param name="eventData"></param>    public void OnEndDrag(PointerEventData eventData)    {        //拖拽结束,销毁代替品        if (drag_icon)        {            Destroy(drag_icon);        }    }    /// <summary>    /// 拖拽到当前图片上    /// </summary>    /// <param name="eventData"></param>    public void OnDrop(PointerEventData eventData)    {        //根据代替品的信息,改变当前对象的Sprite。        var obj = eventData.pointerDrag;        UGUIForDrag drag = obj.GetComponent<UGUIForDrag>();        //检测拖拽物品是否是可拖拽的         if (drag != null)        {            if (!drag.isCanDrug)            {                return;            }        }        //信息匹配        if (IsSameMessage(drag))        {            Debug.Log("信息匹配成功");        }        else        {            Debug.Log("信息匹配失败");            return;        }        this.GetComponent<Image>().sprite = obj.GetComponent<Image>().sprite;    }    /// <summary>    /// 信息匹配    /// </summary>    /// <param name="message"></param>    /// <returns></returns>    bool IsSameMessage(UGUIForDrag message)    {        if (message.matching == matching)            return true;        else            return false;    }}