質問: mousePos + offSet; //UIをドラッグさせる } } ``` 上記のスクリプトを、UIのパネルにアタッチしていました。 ですが、このままだと、同じスクリプトをアタッチしているパネルが同時に動いてしまいます。 ### 試したこと まずパネル自体にスクリプトをアタッチするのを止めました。 そして、 『どのパネルをドラッグしているかを認識するために、Rayを飛ばして、RaycastHitを取得。 そして、取得したRaycastHitの座標を移動させる』みたいなスクリプトを書こうとしました。 (書いたスクリプトはメインカメラにアタッチ) ......ですが、RayがUIパネルに当たらないっぽいんです......。 ### 補足情報 Unityのバージョンは、5.6.1f1です。 プログラムは、つい最近始めたばかりの素人です。よろしくお願いします。
回答: 簡単に調べてみたところ、EventSystem.current.IsPointerOverGameObject()はEventSystemオブジェクト上にあるかどうかをチェックするものだと書かれていました。 なので、パネルが同時に動いてしまう点については、EventSystem.current.IsPointerOverGameObject()によって、すべてのパネルが反応して動いてしまっていることが原因だと思われます。 また、RayがUIパネルに当たらないとのことですが、通常のRaycastHitではなく、EventSystem.current.RaycastAll()を使えば、反応しました。 こちらを参考に書いてみたところ、こうなりました。 このスクリプトでは、パネル上にポインタがあるだけで反応してしまいますが、これをドラッグ時のみに反応するようにすれば大丈夫でしょう。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class UGuiRaycast : MonoBehaviour { void Update() { PointerEventData pointer = new PointerEventData(EventSystem.current); pointer.position = Input.mousePosition; List result = new List(); EventSystem.current.RaycastAll(pointer, result); foreach (RaycastResult raycastResult in result) { // 反応したパネルの名前を表示 Debug.Log(raycastResult.gameObject.name); } } } ``` 補足ですが、このUnityのデフォルトのGUIは「uGUI」と呼ばれております。 Googleで「uGUI ドラッグ」と検索すれば、いくつか実装例が見つかるので、一度確認してみるとよいと思います。