2016年9月28日水曜日

[Unity] TouchScript(8.2)でFlickGestureを使う

TouchScriptは、Unityでタッチ、スワイプ、フリックなどのジェスチャー操作を行えるようにする便利な無料アセットです。
なかなか高機能なようですが、ドキュメントやサンプルが豊富とは言えず、使用するにあたって試行錯誤は覚悟した方が良さそうと思いました。

tsassetstore.png

ただ、バージョン7以降はDLL形式での配布をやめて、すべてC#のソースコードで提供されているようなので、最悪、分からない所はソースを見て解析ということも可能です。一から自分で作った方が早いという人もいるとは思いますが。

今回は、TouchScriptで「画面全体」のフリック操作を導入してみましたので、その導入法の一例を書いておきます。わざわざ「画面全体」と書いたのは、TouchScriptは特定のGameObjectに操作を限定することもできるからです。


TouchScriptのインポート

Asset StoreからTouchScriptをインポートして下さい。

必要クラスの導入

(1) シーンに空のGameObjectを作成します。
その新規GameObjectの名前をTouchScriptなど、分かりやすい名前に変更しておきましょう。

(2) (1)で作成したTouchScriptゲームオブジェクトに、TouchManager、FullscreenLayer、FlickGestureの3つのコンポーネントを追加します。(下図)
touchscript.png

このような形で追加するのは、あくまで一例です。これら3つのコンポーネントを必ずひとつのGameObjectにまとめなければいけないという事ではありません。念のため。

(3) FullscreenLayerのインスペクターで、TypeをMain Cameraに設定すると、TouchManagerのTouch Layersの欄に Fullscreen @ Main Camera が表示されます。

このTouchLayerというのは、TouchScriptで重要なパーツです。
TouchLayerには、ドキュメントによると、以下のものなどがあるようです。
  • FullscreenLayer
  • CameraLayer
  • CameraLayer2D
  • UILayer

FullscreenLayerはTypeにMain Cameraと設定すると、メインカメラにアタッチされ、カメラから見える画面全体をタッチ領域として認識します。

CameraLayerは、3Dオブジェクトをタッチしたりする時に使用するものです。(今回は使用しないので、説明は省きます)

(4) 新規スクリプトを作成し、名前をInputControllerとし(任意)、以下のように実装します。
public class InputController : MonoBehaviour {
    private void OnEnable() {
        GetComponent<FlickGesture>().Flicked += OnFlick;
    }
    private void OnDisable() {
        GetComponent<FlickGesture>().Flicked -= OnFlick;
    }

    // フリックジェスチャーが成功すると呼ばれるメソッド
    private void OnFlick(object sender, System.EventArgs e) {
        var gesture = sender as FlickGesture;
        string str = "フリック: " + gesture.ScreenFlickVector + " (" + gesture.ScreenFlickTime + "秒)";
        Debug.Log(str);
    }
}
作成したら、InputControllerを(1)で作成したTouchScriptオブジェクトにコンポーネントとして追加して下さい。

(5) シーンを実行して、フリック操作をしてみましょう。
なお、FlickGestureのインスペクターから、フリック操作の感度を設定できます。

フリックジェスチャーが成功すると、InputControllerのOnFlickメソッドが呼ばれます。
gesture.ScreenFlickVectorからは、フリックした時のベクトルが得られます。値はScreen Coordinatesです。

Input Source

TouchScriptのタッチ入力は、すべてInput Sourceが管理しています。Input Sourceには、以下のものがあるようです。
  • StandardInput
  • MobileInput (deprecated)
  • MouseInput (deprecated)
  • TUIOInput

StandardInputは、モバイルデバイスのタッチや、パソコンのマウス操作などの入力を受け取ります。通常はこちらを使うと便利だと思います。

TUIOInputは、ネットワークを介しての入力に使用されるようです。

注意:MobileInput、MouseInputは、deprecated に指定されています。

(2)の工程で、TouchScriptオブジェクトにStandardInputコンポーネントを追加してもいいですが、シーンにInput Sourceがひとつも存在しない場合は、実行時にStandardInputが自動で追加されます。
inputsource.png

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...