【Unity】UGUI拖拽格子交换位置

效果类似背包功能,可以随意拖拽位置,交换两个格子位置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;

public class ExchangeCardNode : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    [SerializeField] Role _role;
    public Role role { get { return _role; } }

    Image image;

    void Start()
    {
        image = GetComponent<Image>();

    }

    // ------

    Vector2 dragOffset;
    Transform lastParent;

    public void OnBeginDrag(PointerEventData eventData)
    {
        lastParent = transform.parent;
        dragOffset = (Vector2)transform.position - eventData.position;
        transform.position = eventData.position + dragOffset;
        image.raycastTarget = false;

        transform.SetParent(transform.parent.parent);
    }

    public void OnDrag(PointerEventData eventData)
    {
        transform.position = eventData.position + dragOffset;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        float moveTime = 0.3f;

        GameObject exchangeObj = eventData.pointerCurrentRaycast.gameObject;

        ExchangeCardNode exchangeNode = null;
        if (exchangeObj != null)
            exchangeNode = exchangeObj.GetComponent<ExchangeCardNode>();

        if (exchangeNode != null && role == exchangeNode.role)
        {
            transform.SetParent(exchangeObj.transform.parent);
            exchangeObj.transform.SetParent(lastParent);

            exchangeNode.MoveToPos(Vector3.zero, moveTime);
        }
        else
        {
            transform.SetParent(lastParent);
        }
        MoveToPos(Vector3.zero, moveTime);

        image.raycastTarget = true;

        CardManager.Instance.RefreshBattleCardOrder();
    }

    public void MoveToPos(Vector3 targetPos, float time)
    {
        transform.DOKill();
        if (time <= 0)
        {
            transform.localPosition = targetPos;
        }
        else
        {
            transform.DOLocalMove(targetPos, time, false);
        }
    }

}
发布了104 篇原创文章 · 获赞 74 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_39108767/article/details/99990499