いつもお世話になっております。
PointerEventDataから、 ドラッグをしているのですが、
掴んでいるオブジェクトが、解像度によって、マウスカーソルより早く移動してしまったり、遅かったりしてしまいます。
詳しい方 いられましたら、ご教示頂けますと幸いです。
###起きている問題
・掴んでいるオブジェクトが、解像度によって、マウスカーソルより早く移動してしまったり、遅かったりしてしまう
・Scroll Rectでのドラックは、どの解像度でも問題なくドラッグできている。
・Cameraの Projectionを Perspectiveにすると、ドラッグしたときに ドラッグ量が大きすぎて、飛んで行ってしまう事態が起きてしまいます。
###試したこと
例①
Gameビューを、iPadPro(27322048)に合わせて、CameraのSizeを1050にすれば、通常のドラッグのはやさになります。
例②
Gameビューを、FHD(19201080)に合わせて、CameraのSizeを540にすれば、通常のドラッグのはやさになります。
C#
1using UnityEngine; 2using UnityEngine.EventSystems; 3 4//https://qiita.com/divideby_zero/items/d8eebc44e151a60b2b81 5 6// RequireComponent を使ったスクリプトをゲームオブジェクトにアタッチすると、 7// 必要なコンポーネントが自動的にそのゲームオブジェクトに加えられるようになります。 8[RequireComponent(typeof(CanvasGroup))] 9public class DragObject : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler 10{ 11 public static DragObject dragObject; // 今ドラッグしているオブジェクト 12 public Transform parentTransform; // 親のTransform 13 private Vector3 tapRefPosition; // 実際の位置とドラッグ開始位置の差分を確保する用 14 public CanvasGroup canvasGroup; //アタッチしているオブジェクトのcanvasGroupが入るはず 15 public Transform canvasTransform; // Canvasという名前のオブジェクトのTransformを取得 16 17 public CanvasGroup CanvasGroup 18 { 19 get 20 { //canvasGroupがnullのとき、()内を実行? 21 return canvasGroup ?? (canvasGroup = gameObject.AddComponent<CanvasGroup>()); 22 } 23 } 24/* 25 public Transform CanvasTransform 26 { 27 get 28 { 29 //canvasTransformがnullのとき、()内を実行? 30 //return canvasTransform ?? (canvasTransform = GameObject.Find("Canvas").transform); 31 } 32 } 33*/ 34 35 public void OnBeginDrag(PointerEventData eventData) 36 { 37 // 実際の位置とドラッグ開始位置の差分をtapRefPositionに確保 → 押した位置からそのまま持てる 38 tapRefPosition = (Vector2)transform.position - eventData.position; 39 40 //ドラッグしているオブジェクトを取得? 41 dragObject = this; 42 //parentTransformに、DragObjectの親を格納? 43 parentTransform = transform.parent; 44 // 45 transform.SetParent(canvasTransform); 46 canvasGroup.blocksRaycasts = false; 47 canvasGroup.alpha = 0.5f; 48 } 49 50 public void OnDrag(PointerEventData eventData) 51 { 52 // +tapRefPositionにより → 押した位置からそのまま持てる 53 transform.position = Input.mousePosition + tapRefPosition; 54 //Vector3 posX = transform.position; 55 //posX.x = Input.mousePosition + tapRefPosition; 56 } 57 58 public void OnEndDrag(PointerEventData eventData) 59 { 60 // ドラッグを離したとき、アタッチされているゲームオブジェクトの親が、 61 if (transform.parent == canvasTransform) 62 { 63 transform.SetParent(parentTransform); 64 } 65 dragObject = null; 66 canvasGroup.blocksRaycasts = true; 67 canvasGroup.alpha = 1.0f; 68 } 69 70 public void Update() 71 { 72 if (dragObject == null) 73 { 74 //localPosition = 0 に イーズアウトで近づける 75 //Original Locationに戻る 76 transform.localPosition -= transform.localPosition / 3.0f; 77 } 78 } 79}
どの解像度でも一貫してドラッグ量を同じにするには、どのようにすると良いでしょうか?
何卒宜しくお願い致します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/27 12:24