ゴミ箱

くだらないことからUnityの知識共有まで

Unityでマルチタッチの情報が少ないと思ったら公式リファレンスにあった件

公式リファレンス↓

Unity - マルチタッチスクリーンの入力

つい先日までスマホゲームを作っていて、
二本の指それぞれの位置を別々に取得して
いろいろしたかったのです。

制作が終わって軽く調べていると以下のコードを見つけました。

using UnityEngine;
using System.Collections;

public class TouchTest : MonoBehaviour 
{
    void Update () 
    {
        Touch myTouch = Input.GetTouch(0);

        Touch[] myTouches = Input.touches;
        for(int i = 0; i < Input.touchCount; i++)
        {
            //タッチすると行う何かをここに記入
        }
    }
}

公式リファレンスより

全てはここに集約されてました。
つまりTouch変数にそのフレームで取得している全ての指の情報が入っていたわけです。
わかりやすくこれをいじって…

using UnityEngine;
using System.Collections;

public class TouchTest : MonoBehaviour
{
    //Canvasで適当にImageをたくさん作って配列に入れてください
    public Transform[] Image;

    void Update()
    {  
        if (Input.touchCount > 0)
        {
            //touchCountが0のときに呼ばれるとエラーでます
            //このフレームでのタッチ情報を取得
            Touch[] myTouches = Input.touches;

            //検出されている指の数だけ回して
            //指の位置にImageを移動
            for (int i = 0; i < myTouches.Length; i++)
            {
                Image[i].position = myTouches[i].position;
            }
        }
    }
}

f:id:blacker1017:20170722232443p:plain
こんな感じに配置して実行すると…
f:id:blacker1017:20170722233349g:plain
超簡単にマルチタッチが実装できました!

分かりずらいですが、
赤い板が一本目、緑の板が二本目、青の板が三本目の指に追従しています。

実行してもらえばわかるのですが、
二本タッチして一本目を離すと、
二本目の指が一本目扱いになります…(意味深)

これを回避するために、
一本目が離れたときに二本目と入れ替えるとか
いろいろ頑張ったのですが結局今回のゲームでは
仕様変更で無駄になりました…
この頑張りを次回にでも書こうかなと思います。

補足

ちなみに普通はUnity Editor上でマルチタッチはできません。
画面タッチに対応しているPCだとEditor上で動作します。
もちろんAndroidiOSにビルドすれば問題なく動作します。
お気を付け下さい…

<動作環境> Surface pro4,windows10,core i7,8GB