Unity5でオブジェクトをドラッグする方法

Unity5では小さなスクリプトを追加するだけでオブジェクトが掴めるようになります。Unityのスクリプトは、OnMouseDown関数とOnMouseDrag関数で、マウスのクリックとドラッグ状態を検知できます。そのため、マウスクリックしたときに、マウスカーソルと対象オブジェクトの位置を正確に計算できれば、あとは対象のオブジェクトをマウスカーソルに合わせて移動させればよいだけです。

このC#スクリプトの読むポイントとしては、Unityのシーン上にあるオブジェクトはワールド座標上にあり、マウスカーソルはスクリーン座標にある。という事を理解することです。スクリーン座標は単純に液晶モニターのXY座標です。ワールド座標は、無限に広がるXYZ座標で、ここにゲームオブジェクトが配置されています。

Unityでは、この座標の変換がよくあります。特にマウスカーソル使う場合はよく変換します。変換には、Camera.main(カメラ)から取得できるWorldToScreenPointとScreenToWorldPointを使います。この変換処理はよく使われるので、Unityの場合は、Cameraからすぐアクセスできるようになっています。なので初心者の方はいきなりCameraが出てきて驚くかもしれません。

スクリプトの割り当て

上記スクリプトは、GrappleObjectなどの適当なクラス名で作成し保存して、対象のオブジェクトに割り当てるだけです。

GrappleObjectのスクリプトを割り当てたところ
GrappleObjectのスクリプトを割り当てたところ

デモ

ファースト・パーソンでプレイヤーを動かしながら、このスクリプトでオブジェクトを掴めました!

Unityでは簡単にオブジェクトをつかめる!
Unityでは簡単にオブジェクトをつかめる!