Unityでシングルクリック(タップ)/ダブルクリック(タップ)のイベントを使い分ける
Unityで
・シングルタップするとオブジェクトを大きくする
・ダブルタップするとオブジェクトを小さくする
という極めて単純な処理を実装しようと色々調べましたが、
有償のアセットを購入しない限り、単純には実装できない模様ということが判明(調査が不足しているだけかもしれません)。
調べながらなんとか実装には成功したので、その手順をまとめます。
まず最初に困ったこと。
Touch.tapCountやEvent.clickCountを使用すれば
タップされた回数は取得できるのですが、
冒頭に記載したようにシングルタップ、ダブルタップで処理を出し分けたい場合に
void OnGUI() {
Event e = Event.current;
if (Input.GetButtonDown ("Fire1")) {
if (e.clickCount > 1) {
オブジェクトを小さくする処理();
} else {
オブジェクトを大きくする処理();
}
}
のように記載すると、
シングルタップであれば
1.オブジェクトが大きくなる処理を実行
でOKなのですが、
ダブルタップの場合に
1.オブジェクトが大きくなる処理を実行
2.オブジェクトが小さくなる処理を実行
と、ダブルタップの1回目で処理が即実行されてしまい、
求めた結果である「オブジェクトが小さくなる」になりませんでした
(1回大きくなり、1回小さくなり、結果元通りのサイズになってしまう)。
対応
そこで調べた結果、「一定時間内にタップされた回数をカウントし、1回か2回以上かで処理を分ける」という実装に落ち着きました。
#かなり探したのですが、Unityの標準ライブラリにはこのような処理が無さそうだったので。
実装例:
using UnityEngine;
using System.Collections;
public class TestClass : MonoBehaviour {
public GameObject myObj; //サイズを変更する対象
private bool isDoubleTapStart; //タップ認識中のフラグ
private float doubleTapTime; //タップ開始からの累積時間
// Update関数
void Update () {
// double tap
if (isDoubleTapStart){
doubleTapTime += Time.deltaTime;
if (doubleTapTime < 0.2f) {
if (Input.GetMouseButtonDown (0)) {
isDoubleTapStart = false;
ChangeSize (true);
doubleTapTime = 0.0f;
}
} else {
ChangeSize (false);
// reset
isDoubleTapStart = false;
doubleTapTime = 0.0f;
}
} else {
if (Input.GetMouseButtonDown (0)) {
isDoubleTapStart = true;
}
}
}
//シングルタップの場合は拡大、ダブルタップの場合は縮小するメソッド
void ChangeSize (bool isDoubleClick) {
float x = myObj.GetComponent<Transform> ().localScale.x;
float y = myObj.GetComponent<Transform> ().localScale.y;
float z = myObj.GetComponent<Transform> ().localScale.z;
if (isDoubleClick) {
transform.localScale = new Vector3 (x / 1.1f, y / 1.1f, z / 1.1f);
} else {
transform.localScale = new Vector3 (x * 1.1f, y * 1.1f, z * 1.1f);
}
}
}
myObjには拡大/縮小したいオブジェクトをHierarchyからドラッグして設定しておいてください。
最初にタップされてから0.2秒間は待機し、その間に追加のタップがあれば
ダブルタップと判断して縮小処理を行います。
追加のタップが無ければシングルタップと判断し、拡大処理を行います。
Input.GetMouseButtonDown (0)でのイベント検知ですが、
Unity Gameビューでのマウスクリックも、Android端末上のタップも
いずれも問題なく動くことを確認済みです。
参照した記事
Author And Source
この問題について(Unityでシングルクリック(タップ)/ダブルクリック(タップ)のイベントを使い分ける), 我々は、より多くの情報をここで見つけました https://qiita.com/morio36/items/3de164d6131c902af9bd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .