【Unity】画像を移動、拡縮・回転するスクリプト


指1本でドラッグ、指2本でピンチイン・ピンチアウトするスクリプトの紹介。

以前にも似たような覚書を書いてます。

こういった数学系のスクリプトって嫌いな人は書きたくもないだろうし、コピペで済ませられれば他に注力できますね。

 

次のスクリプトをImageなんかに追加する。

 

注意点

Unityエディタでは Input.touchCount  が0になるので動作しません。

0.2秒以内にタップし終わるとタップイベントが始まります。

時間を加味しないやり方だとフラグを追加して TouchPhase.Begin で true TouchPhase.Moved で false にすることもできます。

ドラッグは EventSystem を使って書くこともできる。

この場合、指の移動にかかわらず対象は指の場所に移動する。

複数に適応するなら全部が動かないようにアクティブな GameObject を対象にするように変更が必要です。

Updateでの処理があるので大量のオブジェクトに適応したいならUpdateでの処理は単一のコントローラーに任せて、タップに合わせてターゲットを変えるほうが良いと思います。

所感

回転部分の理解がつらい。ごり押しで無駄な計算をしてる気がする。

移動、拡縮、回転では始まりからの変化を意識しないととんでもない結果になる。

またタッチする指は0→1→0、0→2→0だけでなくて、いろんなケースがあるのが面倒くさい。

 

追記

このままだと設定ウィンドウを開いて操作をした時にも移動する。

ボタンを押すだけでも Input.GetTouch(0).phase の関係で変な動きになります。

UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject() による判定もできますが、移動対象にマスクをかけていたりすると使えません。

そこで今回のコードに以下を付け足します。

これで特定の window が開いている間は操作できなくなります。

フレーム終了まで待つ処理を入れているのは、閉じるボタン対策です。

これがないと閉じた瞬間のタップが検知されてphaseの関係で誤動作します。

 


コメントを残す

メールアドレスが公開されることはありません。