Dragging Item With Icon Following Pointer Unity C# [duplicate]

依然范特西╮ 提交于 2019-12-25 17:55:11

问题


How To Dragging Item With Icon Following Pointer ?

MAYBE IT WILL TAKE SOME TIMES TO SEE ALL THE CODE. Many thanks Before for your attention.

But I have done a little Code Before. And it is run successful, but there is some mistake in my code. Actually the icon dragging is following the pointer but it just temporary.

And my prediction is because i make an paging inventory Storage 1 , 2 , and 3. When All of 3 Storgae is visible the dragging item icon run successfull with following the pointer. But if one of the inventory storage was hide for example : i have click storage 2 then storage 1 and 3 are hide then when i dragging the item the icon was not following the pointer. It become Stuck. But still can swap item slot. Just only the icon not following the pointer.

Below is my code it a little long :) I will give the detail code.

slotScript.cs (this script is a prefabs of Slot that show item icon, amount)

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;

        }
    }
}

How to change dragging code above i used to this code below :

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) {}
}

Many Thanks

Dennis


回答1:


Very fortunately, there is now an

incredibly simple way

to do this in Unity.

Here it is: https://stackoverflow.com/a/37473953/294884

Ask if you have more trouble!



来源:https://stackoverflow.com/questions/38159975/dragging-item-with-icon-following-pointer-unity-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!