Unityでドラッグアンドドロップをサイトを参考にして実行しようとおもっています。ピクトさんをドラッグして、白の枠にドロップすると白の枠の中にピクトさんが設置される動作を行いたいと思ってます。しかし、ドラッグの動作はできるのですが、ドロップの動作になるとドロップすることができません。白の枠でドロップしても、最初の位置に戻るだけになります。ソースコードはどの関数がどのような動作を行っているのか、この文の意味は何なのかなど調べたのでプログラムの動作はわかったつもりではいますが完全には理解できていないと思います。
ソースコードはそのまま使用させていただいているので、ミスはないと思うのでヒエラルキーやインスペクターの部分で追加できていなかったり、ゲームオブジェクトが違うのかなと試行錯誤したのですが、やはりできませんでした。
unityについて知識不足のため、ご教授お願いします。
参考サイト:https://qiita.com/ayumegu/items/c07594f408363f73008c
Dragというオブジェクトに参考サイトや以下のDragObject.csをアタッチしてます。
DropというオブジェクトにDropObject.csをアタッチしてます。
DragObject
1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.EventSystems; 4 5[RequireComponent(typeof(Image))] 6public class DragObject : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler 7{ 8 private Transform canvasTran; 9 private GameObject draggingObject; 10 11 void Awake() 12 { 13 canvasTran = transform.parent.parent; 14 } 15 16 public void OnBeginDrag(PointerEventData pointerEventData) 17 { 18 CreateDragObject(); 19 draggingObject.transform.position = pointerEventData.position; 20 } 21 22 public void OnDrag(PointerEventData pointerEventData) 23 { 24 draggingObject.transform.position = pointerEventData.position; 25 } 26 27 public void OnEndDrag(PointerEventData pointerEventData) 28 { 29 gameObject.GetComponent<Image>().color = Vector4.one; 30 Destroy(draggingObject); 31 } 32 33 // ドラッグオブジェクト作成 34 private void CreateDragObject() 35 { 36 draggingObject = new GameObject("Dragging Object"); 37 draggingObject.transform.SetParent(canvasTran); 38 draggingObject.transform.SetAsLastSibling(); 39 draggingObject.transform.localScale = Vector3.one; 40 41 // レイキャストがブロックされないように 42 CanvasGroup canvasGroup = draggingObject.AddComponent<CanvasGroup>(); 43 canvasGroup.blocksRaycasts = false; 44 45 Image draggingImage = draggingObject.AddComponent<Image>(); 46 Image sourceImage = GetComponent<Image>(); 47 48 draggingImage.sprite = sourceImage.sprite; 49 draggingImage.rectTransform.sizeDelta = sourceImage.rectTransform.sizeDelta; 50 draggingImage.color = sourceImage.color; 51 draggingImage.material = sourceImage.material; 52 53 gameObject.GetComponent<Image>().color = Vector4.one * 0.6f; 54 } 55}
DropObject
1using UnityEngine; 2using UnityEngine.UI; 3using UnityEngine.EventSystems; 4 5public class DropObject : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler 6{ 7 public Image iconImage; 8 private Sprite nowSprite; 9 10 void Start() 11 { 12 nowSprite = null; 13 } 14 15 public void OnPointerEnter(PointerEventData pointerEventData) 16 { 17 if(pointerEventData.pointerDrag == null) return; 18 Image droppedImage = pointerEventData.pointerDrag.GetComponent<Image>(); 19 iconImage.sprite = droppedImage.sprite; 20 iconImage.color = Vector4.one * 0.6f; 21 } 22 23 public void OnPointerExit(PointerEventData pointerEventData) 24 { 25 if(pointerEventData.pointerDrag == null) return; 26 iconImage.sprite = nowSprite; 27 if(nowSprite == null) 28 iconImage.color = Vector4.zero; 29 else 30 iconImage.color = Vector4.one; 31 } 32 public void OnDrop(PointerEventData pointerEventData) 33 { 34 Image droppedImage = pointerEventData.pointerDrag.GetComponent<Image>(); 35 iconImage.sprite = droppedImage.sprite; 36 nowSprite = droppedImage.sprite; 37 iconImage.color = Vector4.one; 38 } 39}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/17 00:57