アイコンを使用してアイテムをドラッグする方法アイコンを使用したアイテムのドラッグ後のポインタの結合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) {}
}
多くありがとう
デニス
問題を再現する[MCVE]を作成することです。 * minimal *を重視しています。これは誰かが分析することを期待しているひどいコードです。 –
@CodyGray、私はコードを短縮しました。ドラッグシステムの非関連コードは削除されています:) –