Unityのeventの処理について質問です。
OnEndDragのところでちゃんとタイルの中にドロップされたかどうかで場合分けしたいです。
具体的には、ちゃんどドロップしたら、その位置にいく。されなかったら、元の位置にもどるという風にしたいです。
今のままだと、OnDropしたら自動的にOnEndDragも行われちゃうので、OnDropしたらOnEndDragしなくていいようにしたいです。
宜しくお願いします。
DragExitedEvent
ドラッグアンドドロップ操作がキャンセルされ、ドロップターゲットがドラッグされた要素を受け取らなかった場合に送信されるイベント
↑こういうのがあったのですが、記事が少なく、わかりませんでした。
c#
1using System.Collections.Generic; 2using UnityEngine; 3using UnityEngine.EventSystems; 4using UnityEngine.UI; 5 6// Imageコンポーネントを必要とする 7[RequireComponent(typeof(Image))] 8 9// ドラッグとドロップに関するインターフェースを実装する 10public class DragAndDrop : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler,IDropHandler 11{ 12 Canvas canvas; 13 RectTransform rect; 14 CanvasGroup CanvasGroup; 15 Transform ptransform; 16 private void Start() 17 { 18 rect = GetComponent<RectTransform>(); 19 CanvasGroup = GetComponent<CanvasGroup>(); 20 } 21 public void OnBeginDrag(PointerEventData eventData) 22 { 23 ptransform = transform.parent; 24 25 gameObject.transform.SetParent(MyMainController.main.DragArea.transform,true); 26 CanvasGroup.blocksRaycasts = false; 27 canvas = FarmScreen.Farmscreen.canvas; 28 } 29 30 public void OnDrag(PointerEventData eventData) 31 { 32 33 rect.anchoredPosition += eventData.delta / canvas.scaleFactor; 34 } 35 36 public void OnEndDrag(PointerEventData eventData) 37 { 38 CanvasGroup.blocksRaycasts = true; 39 } 40 public void OnDrop(PointerEventData eventData) 41 { 42 43 }
C#
1using System.Collections.Generic; 2using UnityEngine; 3using UnityEngine.EventSystems; 4using UnityEngine.UI; 5 6public class DropArea : MonoBehaviour, IDropHandler 7{ 8 9 public void OnDrop(PointerEventData eventData) 10 { 11 12 if(eventData.pointerDrag!=null) 13 { 14 eventData.pointerDrag.transform.SetParent(FarmScreen.Farmscreen.TileSetArea.transform,false); 15 eventData.pointerDrag.GetComponent<RectTransform>().anchoredPosition = GetComponent<RectTransform>().anchoredPosition; 16 17 18 } 19 } 20}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/16 19:01
2021/01/17 14:44
2021/01/17 14:56