拖动带有图标的项目跟随指针 Unity C#

Dragging Item With Icon Following Pointer Unity C#

如何拖动带有图标跟随指针的项目?

可能需要一些时间才能查看所有代码。非常感谢 Before 的关注。

不过我之前也做过一点代码。它是 运行 成功的,但是我的代码中有一些错误。其实图标是跟着指针拖动的,只是暂时的。

我的预测是因为我制作了一个分页库存存储 1、2 和 3。当所有 3 个 Storgae 可见时,拖动项目图标 运行 成功跟随指针。但是,如果其中一个库存存储被隐藏,例如:我点击存储 2,然后存储 1 和 3 被隐藏,然后当我拖动项目时,图标不跟随指针。它变得卡住了。但仍然可以交换物品栏。只是图标不跟随指针。

下面是我的代码有点长:)我会给出详细代码。

slotScript.cs(这个脚本是Slot的预制件,显示物品图标,数量)

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

public class slotScript : MonoBehaviour, IPointerDownHandler, IPointerEnterHandler, IPointerExitHandler, IDragHandler {
    Image itemImage;
    Sprite icon;
    Text amount;
    public int slotNumber;
    inventory inventoryx; 
    player Playerx;
    item temp;
    menu menux;
    dragitemicon dragger;

    // Use this for initialization

    void Start () {
        inventoryx = GameObject.FindGameObjectWithTag ("inventory").GetComponent<inventory> ();
        itemImage = gameObject.transform.GetChild (0).GetComponent<Image> ();
        amount = gameObject.transform.GetChild (1).GetComponent<Text> ();

    }

    // Update is called once per frame

    void Update () {
        //Show Images Icon Slot Inventory

        if (inventoryx.Player.items[slotNumber].itemName !=  null) {
            itemImage.enabled = true;
            icon = Resources.Load<Sprite> (inventoryx.Player.items[slotNumber].itemIcon + "/" + inventoryx.Player.items[slotNumber].itemName);
            itemImage.sprite = icon;

            amount.text = inventoryx.Player.items[slotNumber].itemStock.ToString();
            amount.enabled = true;

        } else {
            itemImage.enabled = false;
        }


    }

public void OnPointerDown (PointerEventData data) {
        if (inventoryx.Player.items[slotNumber].itemType == item.ItemType.Raw) {
            inventoryx.Player.items [slotNumber].itemStock--;
        }
        //Debug.Log (transform.name);
        if (inventoryx.Player.items [slotNumber].itemName == null && inventoryx.draggingitem) {
            inventoryx.Player.items [slotNumber] = inventoryx.getdragitem;
            inventoryx.closeDragItem ();
            //inventoryx.dragitemicon.GetComponent<Image>().sprite = null;
        } else if (inventoryx.draggingitem && inventoryx.Player.items[slotNumber].itemName != null ) { 
            inventoryx.Player.items[inventoryx.indexofdragitem] = inventoryx.Player.items[slotNumber];
            inventoryx.Player.items[slotNumber] = inventoryx.getdragitem;
            inventoryx.closeDragItem ();
        }
    }

    //On Drag Close ToolTips and Show Drag Item
    public void OnDrag (PointerEventData Data) {
        if (inventoryx.Player.items[slotNumber].itemType == item.ItemType.Raw) {
            inventoryx.Player.items[slotNumber].itemStock++;
        }
        if (inventoryx.Player.items[slotNumber].itemName != null) {
            inventoryx.showDragItem(inventoryx.Player.items[slotNumber], slotNumber);
            dragger.showDragItem(inventoryx.Player.items[slotNumber], slotNumber);
            inventoryx.Player.items[slotNumber] = new item();
            inventoryx.closeToolTips();
            amount.enabled = false;

        }
    }
}

如何更改上面的拖动代码我习惯了下面的代码:

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

    public void OnBeginDrag(PointerEventData eventData) {}

    public void OnDrag(PointerEventData eventData) {
        //Debug.Log ("OnDrag");
        transform.position = eventData.position;
        }

    public void OnEndDrag(PointerEventData eventData) {}
}

非常感谢

丹尼斯

非常幸运,现在有一个

非常简单的方法

在 Unity 中执行此操作。

这里是:

有没有麻烦再问!