LoginSignup
35
27

More than 5 years have passed since last update.

[Unity]TouchScriptでフリックを検知する

Last updated at Posted at 2016-03-07

最近Unityを触り始めました。
Unityに関してはど素人なので、モバイル端末でタッチとかフリックはどうやるのかわからなかったので調べてみたところ、TouchScriptなるものがAssetStoreにありました。しかも無料ということで早速試してみた。

環境
・Unity5.3

共通
プロジェクトを作成したらAssetStoreでTouchScriptを検索してプロジェクトにインポートします。
touchscript.PNG
menu.PNG
こんな感じでインポートされた。

次に空のGameObjectを作成し、TouchScriptのTouchManager,MouseInput,MobileInputをコンポーネントに追加及び、Main CameraにCamera Layerを追加する。

GameObject
cap2.PNG
*TouchManagerのTouchLayersにはMainCameraにCameraLayerを追加するとMainCameraが表示されるようになります。

MainCamera
cap1.PNG

今回はHierarchyにCubeを追加し、適当な名前でscriptをコンポーネントに追加します。今回はCubeControllerとしました。
controller.PNG

タッチの検出
CubeにTouchScriptのTapGestureをコンポーネントに追加します。
controller2.PNG

CubeControllerに下記を実装

private void OnEnable()
{
    GetComponent<TapGesture>().Tapped += HandleTapped;
}

private void OnDisable()
{
    GetComponent<TapGesture>().Tapped -= HandleTapped;
}

void HandleTapped(object sender, System.EventArgs e)
{
    Color color = Color.red;
    this.GetComponent<Renderer>().material.color = color;
}

この状態で実行し、画面に表示されたCubeをタップするとCubeが赤くなります。(見づらくてすみません)

タップ前
beforetap.PNG

タップ後
aftertap.PNG

フリックの検出
CubeにTouchScriptのFlickGestureをコンポーネントに追加します。
cap3.PNG

CubeControllerに下記を実装

private void OnEnable()
{
    GetComponent<FlickGesture>().StateChanged += HandleFlick;
}

private void OnDisable()
{
    GetComponent<FlickGesture>().Flicked += HandleFlick;
    GetComponent<FlickGesture>().MinDistance = 1f;
    GetComponent<FlickGesture>().FlickTime = 0.3f;
}

void HandleFlick(object sender, System.EventArgs e)
{
    var gesture = sender as FlickGesture;

    if (gesture.State != FlickGesture.GestureState.Recognized)
        return;

   if(gesture.ScreenFlickVector.x < 0){
        Left();
    }else if(gesture.ScreenFlickVector.x > 0)
    {
        Right();
    }
}

private void Right()
{
    this.transform.position += new Vector3(0.1f, 0, 0);
}

private void Left()
{
    this.transform.position += new Vector3(-0.1f, 0, 0);
}

この状態で実行し、画面に表示されたCubeをフリックするとフリックした方向に0.1程Cubeが動きます。

感想
TouchScriptのFlickのサンプルが全然なくて、参考通りに実装しても検知してくれなかったり、期待した動作をしてくれなかったりした。試行錯誤した結果、フリックを実装するときはMinDistanceとFlickTimeの設定が重要で、FlickTimeで設定した時間内にMinDistanceで設定した距離以上動かせばフリックとして検知されるっぽい。検知にうまくいかなかった場合を想定してHandleFlickで検知したステータス以外では処理をさせないようにすることで期待した動きができるようになりました。
日本語でTouchScriptを扱った記事は少ないので助けになれば幸いです。

35
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
27