###実現したいこと
UIのパネルを使って、ステータス表示ウィンドウ的なものを作ろうとしています。
パネルをドラッグで自由に移動させたいのですが、方法が思いつきません。
###発生している問題
同じスクリプトをアタッチしている複数のパネルが、ドラッグで同時に動いてしまいます。
###該当のソースコード
C#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.EventSystems; 6 7public class PanelDragCtrl : MonoBehaviour{ 8 Vector3 mousePos; 9 Vector3 clickPos; 10 Vector3 offSet; 11 12 bool dragMode = false; 13 14 void Start () { 15 } 16 17 void Update () { 18 19 // UIの上にカーソルがある時だけ実行 20 if (EventSystem.current.IsPointerOverGameObject() == false) 21 { 22 return; 23 } 24 25 26 if (Input.GetMouseButtonDown(0)) //クリック開始時に 27 { 28 clickPos = Input.mousePosition; //ドラッグ開始位置を取得して、 29 offSet = transform.position - clickPos; //UIの中心とドラッグ開始位置のズレを取得 30 31 dragMode = true; //ドラッグ処理を開始 32 } 33 else if (Input.GetMouseButtonUp(0)) //クリック終了時に 34 { 35 dragMode = false; //ドラッグ処理を終了 36 } 37 38 39 if (dragMode) 40 PanelDrag(); 41 } 42 43 44 void PanelDrag() 45 { 46 mousePos = Input.mousePosition; //ドラッグ中のカーソル位置 47 48 transform.position = mousePos + offSet; //UIをドラッグさせる 49 } 50}
上記のスクリプトを、UIのパネルにアタッチしていました。
ですが、このままだと、同じスクリプトをアタッチしているパネルが同時に動いてしまいます。
###試したこと
まずパネル自体にスクリプトをアタッチするのを止めました。
そして、
『どのパネルをドラッグしているかを認識するために、Rayを飛ばして、RaycastHitを取得。
そして、取得したRaycastHitの座標を移動させる』みたいなスクリプトを書こうとしました。
(書いたスクリプトはメインカメラにアタッチ)
……ですが、RayがUIパネルに当たらないっぽいんです……。
###補足情報
Unityのバージョンは、5.6.1f1です。
プログラムは、つい最近始めたばかりの素人です。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。