TouchScriptでの領域の制限
3D空間のタッチやフリックなどのジェスチャーに便利なTouchScriptで、部分的にタッチやジェスチャーを判定する領域を制限したかったので調べてみた。
どの空間(レイヤー)でジェスチャーをジャッジするかというのが、TouchScript.Layersパッケージにあって、主に
この4つ。
CameraLayerはRayを飛ばして、3D空間のオブジェクトにヒットしているかの判定をする。
CameraLayer2Dは2Dアプリ用。
FullscreenLayerは画面にタッチしてれば当たり判定が入る。
UILayerはuGUIのSpriteに対してヒットすれば判定が入る。
タッチ領域の制限にはLayer Maskというプロパティがあるので、これをつかってもできるかも??ですが、今回は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; }
コメントを残す