前提・実現したいこと
実現したい動作としては、BoxCollider2Dが付いたSpriteのオブジェクトに対して
切るようなフリック操作をして、当たり判定を付けたいです。
まさにこちらのアプリと同様の、切る操作の実装を行いたいです。
自分なりに調べて実装してみたところ、こちらを参考に
なぞった軌道上に当たり判定のある線を引き、指が画面から離れた時に引いた線を消す
と言う実装で一応要件を満たす実装は出来たのですが
画面に対して強く指を押し付けないと線が引けず、非常に感度が悪かったので
別の実装方法を模索しているところです。
調べた限りで解決案が見つからなかったので、ご教示頂けると幸いです。
宜しくお願い致します。
該当のソースコード
C#
1using System.Collections.Generic; 2using UnityEngine; 3 4public class DrawPhysicsLine : MonoBehaviour 5{ 6 private List<GameObject> lines = new List<GameObject>(); 7 public GameObject linePrefab; 8 public float lineMinLength = 0.2f; 9 public float lineMaxLength = 0.5f; 10 public float lineWidth = 0.1f; 11 12 private Vector3 touchPos; 13 14 void Update() 15 { 16 if (Input.GetMouseButtonDown(0)) 17 { 18 touchPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 19 touchPos.z = 0; 20 } 21 22 if (Input.GetMouseButton(0)) 23 { 24 Vector3 startPos = touchPos; 25 Vector3 endPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 26 endPos.z = 0; 27 28 float magnitude = (endPos - startPos).magnitude; 29 30 //スワイプ可能な長さを制限する 31 if ((lineMinLength < magnitude) && (magnitude < lineMaxLength)) 32 { 33 GameObject obj = Instantiate(linePrefab, transform.position, transform.rotation) as GameObject; 34 obj.transform.position = (startPos + endPos) / 2; 35 obj.transform.right = (endPos - startPos).normalized; 36 37 obj.transform.localScale = new Vector3((endPos - startPos).magnitude, lineWidth, lineWidth); 38 39 obj.transform.parent = this.transform; 40 41 this.lines.Add(obj); 42 43 touchPos = endPos; 44 } 45 } 46 47 if (Input.GetMouseButtonUp(0)) 48 { 49 foreach (var line in this.lines) 50 { 51 Destroy(line); 52 } 53 54 this.lines.Clear(); 55 } 56 } 57}
試したこと
こちらを参考に当たり判定のある線を引き、Spriteとの当たり判定をする実装を行った
補足情報(FW/ツールのバージョンなど)
Unity 2019.2.15f1
回答2件
あなたの回答
tips
プレビュー