#はじめに
現在モバイル向けにスワイプ操作でカメラを移動させる処理を実装しています。
スワイプ処理自体は一本の指であればうまくいくのですが、2本目の指を使ってしまうとワープされます。
これはおそらく1本目の指(Input.touches[0]
)を先に画面タップを開始して、それを画面に触れたまま二本目の指Input.touches[1]
を画面に触れさせた時、先にInput.touches[0]
を画面から離してしまうと二本目の指がInput.touches[0]
として登録されてしまうため起こってしまうと思います。
#わからないこと
しかし、僕は二本目の指を画面から離したときの処理の仕方がわかりません。
Input.touches[1].phaze == TouchPhase.Ended
これは離した「瞬間」ではなく、触れていない「状態」の時true
を返すので使えません。
Input.GetMouseButtonUp()
のような機能がタッチ処理にも存在していればいいのですが...
#コード
C#
1 Camera Cam; 2 Vector2 lastPos; 3 4 void Update() 5 { 6 Move(); 7 } 8 9 void Move() 10 { 11 Vector2 currentPos; 12 13 //指の数が2本以上、もしくは触れていないときはスルー 14 if (Input.touchCount >= 2 || Input.touchCount <= 0) 15 return; 16 17 //一本目の指の位置 18 currentPos = Input.touches[0].position; 19 20 Debug.Log(currentPos); 21 22 //初めて一本目が触れたとき1フレーム前の位置を現在地に上書き 23 if (Input.touches[0].phase == TouchPhase.Began) 24 lastPos = currentPos; 25 26 //差を取得 27 float x = lastpos.x - currentPos.x; 28 float y = lastPos.y - currentPos.y; 29 30 //実際に移動 31 Cam.transform.position += new Vector3(x, y, 0) * CamSensi * Cam.orthographicSize / 5 * Time.deltaTime; 32 33 //次フレームのために入れておく 34 lastPos = currentPos; 35
#デバッグ結果
コード中にあるDebug.Log()
の数字はやはり、指が一本の場合その位置が正しく表示されます。
しかし、二本目の指をつけながら一本目の指を離すと二本目の指の位置がデバッグされます。
(あたりまえではありますが...)
これだと先に1本目の指を離すとInput.touches[]
の順番が上がってしまい、2本目の指が1本目の指と思われてしまいます。
どのようにすればワープせずに検知できるでしょうか。
どなたか回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。