在 Unity 中将 N 个对象拖放到彼此的顶部

问题描述 投票:0回答:1

将项目从一个面板拖放到另一个面板。我从 panel1 移动到 panel2 的每个项目都应始终显示在 panel2 中前一个项目的顶部

我正在尝试将对象从一个面板拖放到另一个面板。我能够成功地将 1 个对象从 panel1 中移动并放入 panel2 中。但是当我在 panel1 中选择第二个对象时,第一个对象又回来了。

我希望能够从面板 1 中拖放所有对象,并在面板 2 中一一拖放。拖放时,项目应一个叠放。

我有以下实现拖动的代码:

public class Drag : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    public string playArea = "PlayArea";
    public string playerHand = "PlayerHand";

    static public GameObject itemBeingDragged;
    public Vector3 startPosition;

    public void OnBeginDrag(PointerEventData eventData)
    {
        itemBeingDragged = eventData.pointerDrag;
        itemBeingDragged.transform.SetAsLastSibling();
        startPosition = itemBeingDragged.transform.position;
        GetComponent<CanvasGroup>().blocksRaycasts = false;
    }

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

    public void OnEndDrag(PointerEventData eventData)
    {
        if (eventData.pointerEnter !=null && eventData.pointerEnter.transform.name == playArea)
        {
            itemBeingDragged.transform.position = eventData.position;
        }
        else
        {
            itemBeingDragged.transform.position = startPosition;

        }
        GetComponent<CanvasGroup>().blocksRaycasts = true;
    }

    // Start is called before the first frame update 
    void Start()
    {
        
    }
    // Update is called once per frame
    void Update()
    {
        
    }    
}

我相信当我选择第二个项目时,项目从面板 2 返回到面板 1 的问题是由于 OnBeginDrag 方法中的 itemBeingDragged.transform.SetAsLastSibling()" 行造成的。

当我删除这条线时,我可以从 panel1 中一一取出所有项目并留在 panel2 中,但是我无法始终将项目堆叠到前一个项目上。有些物品放在后面,有些物品留在上面。

任何帮助将不胜感激。

发行视频:Drag and drop items from 1 panel to another one by one. Every item I move from panel1 to panel2 should always appear on top of previous item in panel2

c# unity-game-engine game-development unityscript
1个回答
0
投票

解决方案非常愚蠢,但是 itemBeingDragged 的 GameObject 上有一个更新方法,我在其中编写了设置父级的代码。 Unity dev 中的 update 方法会被连续调用,这意味着在 update 方法中编写的用于设置静态变量的任何代码都将始终覆盖您在其他地方所做的任何其他更改。

© www.soinside.com 2019 - 2024. All rights reserved.