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;
}
コメントを残す