TouchScriptでの領域の制限


3D空間のタッチやフリックなどのジェスチャーに便利なTouchScriptで、部分的にタッチやジェスチャーを判定する領域を制限したかったので調べてみた。
どの空間(レイヤー)でジェスチャーをジャッジするかというのが、TouchScript.Layersパッケージにあって、主に

  • CameraLayer
  • CameraLayer2D
  • FullscreenLayer
  • UILayer
  • この4つ。
    CameraLayerはRayを飛ばして、3D空間のオブジェクトにヒットしているかの判定をする。
    CameraLayer2Dは2Dアプリ用。
    FullscreenLayerは画面にタッチしてれば当たり判定が入る。
    UILayerはuGUIのSpriteに対してヒットすれば判定が入る。

    タッチ領域の制限にはLayer Maskというプロパティがあるので、これをつかってもできるかも??ですが、今回はUILayerを使うことに。

    touch_script_uilayer

    こんな感じでUILayerのGameObjectか、その下の階層にImageなどを配置してやるとその範囲でジェスチャーを拾ってくれる。
    (*追記17.01.19 : UILayerはこの画像の構造だと動かなくなったので、Canvasなど上のGameObjectに当てた方がいいっぽい)
    ちなみにTapGestureをFlickGestureの上に置いてしまうと、先に判定が入ってしまいフリックが拾いづらいので注意。
    あとはこんな風に自作のコンポーネントのGestureControllerにてジェスチャーを登録すれば完了。

    /// <summary>
    /// ジェスチャー判断用。
    /// </summary>
    [SerializeField]
    FlickGesture flickGesture;
    [SerializeField]
    TapGesture tapGesture;
    
    /// <summary>
    /// OnEnable.
    /// </summary>
    void OnEnable() {
    	this.flickGesture.Flicked += this.OnFlicked;
    	this.tapGesture.Tapped += this.OnTapped;
    }
    
    /// <summary>
    /// OnDisable.
    /// </summary>
    void OnDisable() {
    	this.flickGesture.Flicked -= this.OnFlicked;
    	this.tapGesture.Tapped -= this.OnTapped;
    }
    

    コメントを残す