指1本のスワイプで物体を回転させて、指2本でピンチイン・ピンチアウトすると物体を拡縮させるスクリプトを実装する。
タップ入力の方法はいくつかあるがマルチタップを検出するには Input.touches を使う。
まずEmptyオブジェクトにでも以下のスクリプトを貼り付ける。
obj に対象のオブジェクトをアタッチすれば準備OK。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using UnityEngine; using System.Collections; public class ObjCtrl : MonoBehaviour { public GameObject obj; //回転用 Vector2 sPos; //タッチした座標 Quaternion sRot;//タッチしたときの回転 float wid,hei,diag; //スクリーンサイズ float tx,ty; //変数 //ピンチイン ピンチアウト用 float vMin = 0.5f , vMax = 2.0f; //倍率制限 float sDist = 0.0f, nDist = 0.0f; //距離変数 Vector3 initScale; //最初の大きさ float v = 1.0f; //現在倍率 void Start() { wid = Screen.width; hei = Screen.height; diag = Mathf.Sqrt(Mathf.Pow(wid,2) + Mathf.Pow(hei,2)); initScale = obj.transform.localScale; } void Update () { if (Input.touchCount == 1){ //回転 Touch t1 = Input.GetTouch (0); if (t1.phase == TouchPhase.Began){ sPos = t1.position; sRot = obj.transform.rotation; }else if(t1.phase == TouchPhase.Moved||t1.phase == TouchPhase.Stationary){ tx = (t1.position.x - sPos.x)/wid; //横移動量(-1<tx<1) ty = (t1.position.y - sPos.y)/hei; //縦移動量(-1<ty<1) obj.transform.rotation = sRot; obj.transform.Rotate(new Vector3(90*ty, -90*tx, 0),Space.World); } } else if (Input.touchCount >= 2) { //ピンチイン ピンチアウト Touch t1 = Input.GetTouch (0); Touch t2 = Input.GetTouch (1); if (t2.phase == TouchPhase.Began) { sDist = Vector2.Distance (t1.position, t2.position); } else if ((t1.phase == TouchPhase.Moved||t1.phase == TouchPhase.Stationary) && (t2.phase == TouchPhase.Moved||t2.phase == TouchPhase.Stationary) ) { nDist = Vector2.Distance (t1.position, t2.position); v = v + (nDist - sDist) / diag; sDist = nDist; if(v > vMax) v = vMax; if(v < vMin) v = vMin; obj.transform.localScale = initScale * v; } } } } |
実機の動作はこんな感じ。
設定は以下のようになっている。
- 倍率は0.5倍から1.5倍まで
- スワイプだと端から端までスワイプすると90度回転
- ピンチイン・アウトなら2点の距離が0から最大(対角線)になれば1増える(0.5倍から1.5倍)
タップの処理は実機で確認しないといけないので久々にちゃんと計算部分を確認した。
適当に書いて動作確認するのが癖になっていたのでこれを機に改めたい。
めちゃくちゃ参考になりました、ありがとうございます
↑名前書き忘れておりました。黒畑喜英と申します。