FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【Unity】マルチタップ(マルチタッチ)ってuGUIでできないの?結局無理やりになっちゃったけど・・・から、できる方法に修正してみた! 

    こんにちは!坂内でございます。

    最近全然技術ネタが無かったのですが、ようやく書くこと見つけたので書いちゃいます!

    他のブログとかにも色々と書かれていますが、マルチタップについて。

    例えば、以下のような感じで、ボタンAとボタンBがあり、同時に押している間なにかをするといった処理の場合のコードなんぞを考えてみました。


    今回こちらのボタンAとボタンBはuGUIのImageで作っています。
    uGUIのボタンにはマルチタップが無いのかな?そのままuGUIのボタンにしてしまうとできません。

    ってことで、まずは以下のコードを書きます。

        bool leftTouch;
    bool rightTouch;

    void Update () {
    leftTouch = false;
    rightTouch = false;
    Touch[] myTouches = Input.touches;
    for (int i = 0; i < Input.touchCount; i++) {

    if(!leftTouch){
    leftTouch = isTouchLeft(myTouches[i]);
    }
    if(!rightTouch){
    rightTouch = isTouchRight(myTouches[i]);
    }
    }
    if(leftTouch && rightTouch){
    Debug.Log("両方押されてるよ");
    }
    }

    ///
    /// 左指をタップしているか
    ///

    ///
    bool isTouchLeft(Touch touche) {
    Vector2 touchPoint = Camera.main.ScreenToWorldPoint(touche.position);
    Collider2D collition2d = Physics2D.OverlapPoint(touchPoint);
    if (collition2d) {
    RaycastHit2D hitObject = Physics2D.Raycast(touchPoint, -Vector2.up);
    if (hitObject) {
    if (hitObject.collider.gameObject.name == "btnA") {
    return true;
    }
    }
    }
    return false;
    }

    ///
    /// 右指をタップしているか
    ///

    ///
    bool isTouchRight(Touch touche) {
    Vector2 touchPoint = Camera.main.ScreenToWorldPoint(touche.position);
    Collider2D collition2d = Physics2D.OverlapPoint(touchPoint);
    if (collition2d) {
    RaycastHit2D hitObject = Physics2D.Raycast(touchPoint, -Vector2.up);
    if (hitObject) {
    if (hitObject.collider.gameObject.name == "btnB") {
    return true;
    }
    }
    }
    return false;
    }


    ボタンAのオブジェクト名を「btnA」、ボタンBのオブジェクト名を「btnB」にし、両方のボタンにCircleCollider2D(形にあったコライダーをつける)をつけます。

    Raycastを使用するため、コライダーが必要になります。

    これで、両方をタップしている間、「両方押されてるよ」のメッセージが出る感じに!
    絵を変えたい場合は、両方押されてるよのタイミングで絵を変えてあげてね!!

    ってことで、今回はこんな感じでアデュ~ノシ

    ************************************************
    追記:narudesignさん(@narudesign_dev)から楽な方法教えて頂きました!!

    次のコードにしてー・・・
    bool leftTouch;
    bool rightTouch;
    public Text text;

    public void LeftDown() {
    leftTouch = true;
    }

    public void LeftUp() {
    leftTouch = false;
    }

    public void RightDown() {
    rightTouch = true;
    }

    public void RightUp() {
    rightTouch = false;
    }

    void Update () {
    if (leftTouch && rightTouch) {
    text.text = "両方押されてるよ";
    } else if (leftTouch) {
    text.text = "左おされてるよ";
    } else if (rightTouch){
    text.text = "右おされてるよ";
    } else {
    text.text = "";
    }
    }

    で、左右のボタンに、EventTriggerをつけてPointerDown/Upをつけるだけ!


    できるじゃー あーりませんか!
    ここで注意。

    テストしやすいようにとUnityRemoteを使っていただのですが、こいつがいけないらしいです。
    UnityRemoteだとマルチタップ非対応?
    この方法でも、UnityRemoteだと動作しませんが、実機に入れるとできます!!


    ありがとうnarudesignさん!!
    ************************************************

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/233-258b0a53
    この記事にトラックバックする(FC2ブログユーザー)