[Unity] タッチパッド(画面クリック)による入力を認識させる
パッド的な入力、つまりDSやスマホに多い入力ですね。
PCではマウスドラッグ・クリックでの動作となります。
今回はテストとしてトランプをタッチすると消えるプログラムを作ります。
トランプ画像は無料素材倶楽部さんからお借りしました。ありがとうございます。
では早速。
ダウンロードしてきた「trump」フォルダを「Project」タブにドラッグしてimportします。
試しにpng画像の一枚をSceneにドラッグして表示してみました。
これに衝突判定をつけたいので、「Inspector」タブの「Add Component」から「Physics 2d」>>「Box Collider 2D」を選択します。「Is Trigger」にチェック。
そして、「Tag」>>「Add Tag」で「card1」というタグを生成し、これを適用します。
最終的にこうなっていればok。
そしてクリックしたオブジェクトを認識するには、3dと2dで違うコマンドを用いるみたいです。
あ、そうなんだ。変わるんだ。ややこしいなあ。
でも多分、2Dだと3Dの処理をするのは無駄が多すぎるんだろうな。しょうがない。
3D
2D
(ちなみに、ついでだから書いておくとInstantiate(すでにあるものをその位置に複製)のところは、すでにあるものを移動にしたかったら
のように関数を定義して、これを使えばできます。2Dオブジェクトでも。)
これを、test.csという名前でAssetsの下位ディレクトリ(中という意味)に保存しておいて、「Main Camera」の「Inspector」タブにドラッグ&ドロップ。
再生前はこんな感じで(これ撮った時表面とかも全部sceneに入れてたのでクローバーのカード見えませんね汗)、
再生して、この状態から、Gameタブのカードをクリックするとちゃんと消えました。
無事タッチ入力が認識されたようです。
PCではマウスドラッグ・クリックでの動作となります。
今回はテストとしてトランプをタッチすると消えるプログラムを作ります。
トランプ画像は無料素材倶楽部さんからお借りしました。ありがとうございます。
では早速。
ダウンロードしてきた「trump」フォルダを「Project」タブにドラッグしてimportします。
試しにpng画像の一枚をSceneにドラッグして表示してみました。
これに衝突判定をつけたいので、「Inspector」タブの「Add Component」から「Physics 2d」>>「Box Collider 2D」を選択します。「Is Trigger」にチェック。
そして、「Tag」>>「Add Tag」で「card1」というタグを生成し、これを適用します。
最終的にこうなっていればok。
そしてクリックしたオブジェクトを認識するには、3dと2dで違うコマンドを用いるみたいです。
でも多分、2Dだと3Dの処理をするのは無駄が多すぎるんだろうな。しょうがない。
3D
if (Input.GetMouseButtonDown (0)) //もしマウスの左ボタン(0)が押されたら
{ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit)){ { obj /*クリックされたオブジェクト*/ = hit.collider.gameObject; }
}
2D
if (Input.GetMouseButtonDown (0))
{ Vector2 vec = Camera.main.ScreenToWorldPoint (Input.mousePosition); Collider2D coll = Physics2D.OverlapPoint (vec); if (coll) { obj /*クリックされたオブジェクト*/ = coll.transform.gameObject; }
}
これを応用してサンプルコードを書きます。
さっき出しておいたクローバーの1のカードを一旦カメラの視野の外に追い出しておいて。以下のようなサンプルを用意しました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour {
void Start () { GameObject z02 = GameObject.Find("c01"); Instantiate (z02, new Vector2 (1.5f, 1.5f), Quaternion.identity); //初期位置 }
void Update () { if (Input.GetMouseButtonDown (0)) { Vector2 vec = Camera.main.ScreenToWorldPoint (Input.mousePosition); Collider2D coll = Physics2D.OverlapPoint (vec); if (coll) { GameObject obj /*クリックされたオブジェクト*/ = coll.transform.gameObject; obj.SetActive (false); //見えなくする } } }
}
(ちなみに、ついでだから書いておくとInstantiate(すでにあるものをその位置に複製)のところは、すでにあるものを移動にしたかったら
void Movetoset (GameObject obj, float x, float y){ Vector3 pos = obj.transform.position; pos.x = x; pos.y = y; obj.transform.position = pos; }
のように関数を定義して、これを使えばできます。2Dオブジェクトでも。)
これを、test.csという名前でAssetsの下位ディレクトリ(中という意味)に保存しておいて、「Main Camera」の「Inspector」タブにドラッグ&ドロップ。
再生前はこんな感じで(これ撮った時表面とかも全部sceneに入れてたのでクローバーのカード見えませんね汗)、
再生して、この状態から、Gameタブのカードをクリックするとちゃんと消えました。
無事タッチ入力が認識されたようです。
コメント
コメントを投稿