Unityで作成したモバイル向けゲームでのタッチ判定の簡単な実装。
以下のスクリプトを、タップされたときに何かを実行したいオブジェクトに付けてあげればOKです。
(標準で用意されているOnMouseDownでは同時押しの際にうまく反応してくれません)
TouchTest.cs
using UnityEngine;
using System.Collections;
public class TouchTest : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if(OnTouchDown()){
Debug.Log("タップされました");
}
}
//スマホ向け そのオブジェクトがタッチされていたらtrue(マルチタップ対応)
bool OnTouchDown() {
// タッチされているとき
if( 0 < Input.touchCount){
// タッチされている指の数だけ処理
for(int i = 0; i < Input.touchCount; i++){
// タッチ情報をコピー
Touch t = Input.GetTouch(i);
// タッチしたときかどうか
if(t.phase == TouchPhase.Began ){
//タッチした位置からRayを飛ばす
Ray ray = Camera.main.ScreenPointToRay(t.position);
RaycastHit hit = new RaycastHit();
if (Physics.Raycast(ray, out hit)){
//Rayを飛ばしてあたったオブジェクトが自分自身だったら
if (hit.collider.gameObject == this.gameObject){
return true;
}
}
}
}
}
return false; //タッチされてなかったらfalse
}
}
注意:PC上のエディタでは反応しないので、実機もしくはunity remote等で試す必要があります。
http://docs.unity3d.com/jp/current/ScriptReference/Touch.html
http://docs.unity3d.com/jp/current/ScriptReference/Input.GetTouch.html