[Unity]iPhoneで長押しが判定できない

1

iPhone版を実機で動かした時に画面タッチの長押しが効かない問題が発生した。

理由はすぐに判明して「TouchPhase.Stationary」がほとんど働いていなかった。

 

TouchPhase.Stationaryは「指が画面に触れているが動いてはいないとき」を表す状態で

var touch = Input.GetTouch( 0 ); 
if( touch.phase == TouchPhase.Stationary )
{
  // 一定時間この状態が続いたら長押しである
}

のように使用する。

Android版ではここで長押し判定を行っていた。

 

しかしiPhoneではタッチの感度が良すぎて「指が画面に触れているが動いてはいないとき」にはほとんどならなかった。

指は動いていないようで微妙に動いていると判断されてしまっているようだ。

Androidでは(もしくは端末によっては)ある程度以上指が動かなければ「TouchPhase.Stationary」であるとみなすのかもしれない。

 

なので「ある程度以上指が動かなければ」の状態を自分で実装してやることでこの問題は解決した。

var touch = Input.GetTouch( 0 );
if( touch.phase == TouchPhase.Moved )
{
  if( Vector3.Distance( touch.position, this.prePos ) <= 14.37395f )
  {
    // 一定時間この状態が続いたら長押しである
  }
  this.prePos = touch.position;
}

このように現在のタッチ座標(touch.position)と前のフレームのタッチ座標(this.prePos)を比較して一定距離以内であれば動いてないとみなすようにする。

14.37395fの部分は要調整。画面の大きさに合わせた値を動的に設定する必要があるかもしれない。

 

 


<< | 2/8PAGES | >>

PR

calendar

S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>

情報

広告

広告

広告

広告

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

Nintendo Switch Joy-Con(L) ネオンブルー/(R) ネオンレッド
価格:32378円(税込、送料無料) (2018/7/29時点)


selected entries

categories

archives

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM