2016-07-02 7 views
-1

アイコンを使用してアイテムをドラッグする方法アイコンを使用したアイテムのドラッグ後のポインタの結合C#

いつでもすべてのコードを見ることができます。あなたの注意の前に多くの感謝。

しかし、少し前にコードを実行しました。そして正常に実行されますが、私のコードには何らかの誤りがあります。実際にアイコンのドラッグはポインタの後にありますが、一時的なものです。

私はページングインベントリ1、2、3を作成しているため予測しています.3つのStorgaeがすべて表示されている場合、ドラッグ項目のアイコンはポインタをたどりながら成功します。しかし、インベントリストレージの1つが非表示になっていた場合は:ストレージをクリックして2を押してから、ストレージ1と3が非表示になり、アイテムをドラッグしたときにアイコンがポインタに追従していませんでした。それはスタックになる。しかし、まだアイテムスロットを交換することができます。ポインタをたどらないアイコンだけ。

以下は私のコードです少し長めです:)詳細コードを記載します。

slotScript.cs(このスクリプトは量、アイテムアイコンを表示し、スロットのプレハブです)

私は以下のコードを使用し、上記のコードをドラッグ変更方法
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) {} 
} 

多くありがとう

デニス

+0

問題を再現する[MCVE]を作成することです。 * minimal *を重視しています。これは誰かが分析することを期待しているひどいコードです。 –

+0

@CodyGray、私はコードを短縮しました。ドラッグシステムの非関連コードは削除されています:) –

答えて

0

非常に幸運にも、

非常に簡単な方法

ユニティでこれを行うには。

はここにある:https://stackoverflow.com/a/37473953/294884

あなたはより多くの悩みを持っているかどうか尋ねます!

+0

こんにちは、@ジョー、このコードを説明することができますか? (public void OnBeginDrag(PointerEventData eventData){})およびthis(public void OnEndDrag(PointerEventData eventData){})を返します。ありがとう –

+0

こんにちはデニス!あなたは「幽霊は何ですか?」という意味ですか? – Fattie

+0

私はあなたのUIオブジェクトにコードを置くことをお勧めします - それはすべて魔法のように動作します!幽霊に関しては、**単にそれを使用しないでください**最初に、それについて心配しないでください。ドラッグするだけで、見栄えを良くすることです。 – Fattie

関連する問題