背包的拖动和交换

来源:互联网 发布:linux 最新内核 编辑:程序博客网 时间:2024/06/15 21:07
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


public class Move : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler,IDropHandler
{
    public RectTransform canvas;
    Vector3 local;
    Vector3 offset;
    GameObject go;
    public GameObject currobj;
// Use this for initialization
    GameObject CreateObject(GameObject go,RectTransform rec)
    {
        GameObject g = new GameObject("game",typeof(Image));
        g.transform.parent = rec;
        g.GetComponent<Image>().sprite = go.GetComponent<Image>().sprite;
        g.transform.position = go.transform.position;
        g.GetComponent<Image>().raycastTarget = false;


        g.GetComponent<RectTransform>().sizeDelta = go.GetComponent<RectTransform>().sizeDelta;
        StartCoroutine(MaxAndMin(g.GetComponent<RectTransform>()));
        


        return g;
    }


    private IEnumerator MaxAndMin(RectTransform rectTransform)
    {
        Vector2 scale = rectTransform.sizeDelta;
        rectTransform.sizeDelta *= 1.3f;
        yield return new WaitForSeconds(0.15f);
        rectTransform.sizeDelta = scale;
    }


    public void OnBeginDrag(PointerEventData eventData)
    {
        go = CreateObject(gameObject,canvas);
        if (RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent<RectTransform>(), Input.mousePosition, eventData.enterEventCamera, out local))
        {
            offset = transform.position - local;
        }
    }


    public void OnDrag(PointerEventData eventData)
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, LayerMask.GetMask("Plane")))
        {
            currobj.transform.position = hit.point;
        }
        if (go != null)
        {
            go.transform.position = Input.mousePosition+offset;
        }
    }


    public void OnEndDrag(PointerEventData eventData)
    {
        if (go != null)
        {
            Destroy(go);
            go = null;
        }
    }

    public void OnDrop(PointerEventData eventData)
    {
        Sprite temp = new Sprite();
        temp = eventData.pointerDrag.GetComponent<Image>().sprite;
        eventData.pointerDrag.GetComponent<Image>().sprite = gameObject.GetComponent<Image>().sprite;
        gameObject.GetComponent<Image>().sprite = temp;
    }
}
原创粉丝点击