2016-07-02 17 views
-1

Wie man Element mit dem folgenden Zeiger des Symbols zieht?Ziehen des Elements mit dem Symbol, das dem Zeiger folgt Einheit C#

VIELLEICHT NIMMT ES EINIGE ZEITEN, UM ALLE CODE ZU SEHEN. Vielen Dank. Vorher für Ihre Aufmerksamkeit.

Aber ich habe ein wenig Code zuvor getan. Und es wird erfolgreich ausgeführt, aber es gibt einen Fehler in meinem Code. Eigentlich folgt das Ziehen des Icons dem Zeiger, aber es ist nur vorübergehend.

Und meine Vorhersage ist, weil ich einen Paging-Inventar Storage 1, 2 und 3 mache. Wenn Alle 3 Storgae sichtbar ist, läuft das Ziehen des Item-Icons erfolgreich mit dem Mauszeiger. Aber wenn einer der Lagerbestände zum Beispiel ausgeblendet war: Ich habe einen Klickspeicher 2, dann sind Speicher 1 und 3 ausgeblendet. Wenn ich das Element ziehe, folgt das Symbol nicht dem Zeiger. Es wird hart. Aber immer noch kann Artikel Slot tauschen. Nur das Symbol folgt nicht dem Zeiger.

Unten ist mein Code es ein wenig lang :) Ich werde den Detailcode geben.

slotScript.cs (dieses Skript ist ein prefabs von Slot, das Element Symbol zeigen, Menge)

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; 

     } 
    } 
} 

Wie ziehen Code ändern oben i unten an diesem Code verwendet:

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

Viele dank

Dennis

+0

Die Idee ist, ein [MCVE] zu erstellen, das das Problem reproduziert. Schwerpunkt auf * minimal *. Das ist eine Menge Code, den Sie von jemandem erwarten. –

+0

@CodyGray, ich habe den Code verkürzen. Nicht verwandter Code in einem Drag-System wurde gelöscht :) –

Antwort

0

Sehr zum Glück gibt es jetzt eine

denkbar einfache Weise

dies in der Einheit zu tun.

Hier ist sie: https://stackoverflow.com/a/37473953/294884

Fragen Sie, ob Sie mehr Probleme haben!

+0

Hallo, @Joe, könnte diesen Code erklären, wofür? (public void OnBeginDrag (PointerEventData eventData) {}) und dies (ublic void OnEndDrag (PointerEventData eventData) {}). Danke –

+0

Hallo Dennis! Meinst du "was ist der Geist"? – Fattie

+0

Ich schlage vor, Sie nur den Code auf Ihre UI-Objekte - und alles funktioniert magisch! In Bezug auf den Geist, ** benutze es einfach nicht ** zuerst, mach dir keine Sorgen darüber. Es ist nur so, dass es beim Ziehen gut aussieht. – Fattie