前提・実現したいこと
こちらのサイトを参考に、ドラッグ&ドロップの実装を試みているのですが、ドロップした処理が動かないため、ご教示お願い致します。
該当のソースコード
下記のようなヒエラルキーの構造でオブジェクトを用意しました。
・Canvas (Canvas Groupコンポーネントをアタッチ) ・Field1 (Planeオブジェクト) ・Card1 (Imageオブジェクト)(DragObj.csをアタッチ) ・Field2 (Planeオブジェクト)(DropArea.csをアタッチ) ・Card2 (Imageオブジェクト)
DragObj.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class DragObj : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { 7 8 [SerializeField] 9 CanvasGroup canvasGroup; 10 11 public Transform parentTransform; 12 public void OnBeginDrag(PointerEventData data){ 13 Debug.Log("OnBeginDrag"); 14 canvasGroup.blocksRaycasts = false; 15 parentTransform = transform.parent; 16 transform.SetParent(transform.parent.parent); 17 18 } 19 public void OnDrag(PointerEventData data){ 20 transform.position = data.position; 21 } 22 public void OnEndDrag(PointerEventData data){ 23 Debug.Log("OnEndDrag"); 24 transform.SetParent(parentTransform); 25 canvasGroup.blocksRaycasts = true; 26 } 27}
DropArea.cs
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.EventSystems; 5 6public class DropArea : MonoBehaviour, IDropHandler 7{ 8 public void OnDrop(PointerEventData data){ 9 Debug.Log(gameObject.name); 10 11 DragObj dragObj = data.pointerDrag.GetComponent<DragObj>(); 12 if(dragObj != null){ 13 dragObj.parentTransform = this.transform; 14 Debug.Log(gameObject.name+"に"+data.pointerDrag.name+"をドロップ"); 15 } 16 } 17}
しかし、試したところ、OnDropにおける処理が動きませんでした。
C#
1Debug.Log(gameObject.name);
のログから出ませんでした。
試したこと
ゲーム実行をしたときの挙動を調べました。
・Card1をドラッグしたら、Card1がヒエラルキーにおいて、Canvas直下に移動することを確認しました。
ドラッグし終わると、どの位置にドロップしてもヒエラルキーにおいてCard1はField1の直下に移動することを確認しました。
(Field2にドロップしても、ヒエラルキーにおいてCard1がField1の直下に移動してしまうので、この辺りの挙動がおかしいということを
確認しました。)
・ドラッグ中は、blocksRaycastsがfalseになって、ドラッグし終わったら、blocksRaycastsがtrueになることを確認しました。
・ドラッグにより、Card1がスクリーン上を移動できることを確認しました。
・ドラッグの開始と終了時に「OnBeginDrag」と「OnEndDrag」のログが出力されることを確認しました。
・スクリーン上で、Field2以外の箇所にドロップしたら、再び、何度でもCard1がドラッグ移動可能になりますが、
スクリーン上で、Field2の箇所にドロップすると、それ以降は、Card1がドラッグできなくなることも確認しました。
この辺りは挙動がおかしい気がします。
Field2にドロップした際は、「OnBeginDrag」と「OnEndDrag」のログは出力されますが、OnDrop内のログは一切出力されません。
補足情報(FW/ツールのバージョンなど)
Unity 2020.1.2f1 (64-bit)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。