質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

2696閲覧

ドロップした処理が動かない

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/08/23 18:32

前提・実現したいこと

こちらのサイトを参考に、ドラッグ&ドロップの実装を試みているのですが、ドロップした処理が動かないため、ご教示お願い致します。

該当のソースコード

下記のようなヒエラルキーの構造でオブジェクトを用意しました。

・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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

あまり詳しくはないのですが、リンク先を見たところ、canvasではなくてCard1にCanvas Groupをつけるのでは?

投稿2021/04/09 03:25

Jyha1420B1G7DHP

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問