第12回目は、前回に引き続きUnity内でのタッチ処理についてブログに書いていきたいと思います。 今回は、個別のオブジェクトにタッチ処理を実装する方法です。
前回:【Unity】タッチ処理を検出する。 | albatrus.com
NGUIを利用する場合
NGUIでタッチ処理を実装するのは非常に簡単です。 予め色々な入力動作に対応をしたメソッドが用意されているのでこれを利用します。 [c]
void OnPress (bool isDown) {
Debug.Log ("Press");
}
void OnDrag (Vector2 delta) {
Debug.Log ("drag");
}
[/c] ほぼこのサイトから動作を確認しました。 [参考]Unity & NGUI でタッチやスワイプのイベントを取得する - nirasan's tech blog
通常の方法
NGUIを使わない場合は、以下の様なコードを書きます。 [c] void Update(){
if (Input.touchCount > 0){
Touch touch = Input.GetTouch(0);
Vector2 newVec = new Vector2(touch.position.x,Screen.height - touch.position.y);
Vector2 tapPoint = Camera.main.ScreenToWorldPoint (newVec);
Collider2D coll = Physics2D.OverlapPoint(tapPoint);
if(coll){
//タッチ直後
if(touch.phase == TouchPhase.Began){
//タッチの処理
Debug.Log("touch Object");
}
}
}
} [/c]
newVecはタッチをした位置を調整しています。(タッチした位置と実際の位置は違う) [c]
Vector2 newVec = new Vector2(touch.position.x,Screen.height - touch.position.y);
[/c]
これをUnity内のPositionに変換をして、Collider2Dとの位置関係を調べています。 [c]
Vector2 tapPoint = Camera.main.ScreenToWorldPoint (newVec); Collider2D coll = Physics2D.OverlapPoint(tapPoint);
[/c]
このようなコードで個別にタッチ処理が実現できました。
【追記 9/11】
上記の方法ではオブジェクトが複数ある場合に上手く動作しません。 こちらに関しては、うまくいき次第ブログを書き直したいと思います。 大変申し訳ありません。
追加記事を書きました。 【Unity 2D】GameObjectにタッチ処理を実装する | albatrus.com
ゲーム作りのはじめかた Unityで覚える企画からレベルデザインまで あすな こうじ SBクリエイティブ 売り上げランキング : 10800 Amazonで詳しく見る |