電子工作等調べたことの備忘録

電子工作ブログ

Unity(ユニティー)

マウスで3Dオブジェクトを操作する1

更新日:

職場でUnityを使ってViveのステージを作っているが、家ではViveがないので動作確認しながら進めることができず不便。マウスで操作できるステージを作っておけばちょい変更でVive向けにできるのではと考え、マウスで3Dオブジェクトを操作するステージを作ることを試みる。

まずはマウスの位置情報を取り込むところから。ググってみると、Input.mousePositionとCamera.main.ScreenToWorldPointを使ってけっこう簡単にマウスの位置情報を取り込めるとあったので、やってみた。

Input.mousePositionでは、単純にPCの画面上のマウス座標を取得するだけ。Camera.main.ScreenToWorldPointを使うことで、それをUnityの世界の3D座標に変換してくれるらしい。書いたコードは↓。このスクリプトをPlaneオブジェクトにくっつけた。

出力されるログを見ると、マウスのポインターの位置に合わせて、マウス座標は表示されているが、3D変換後の値がずっと同じ値。。なぜ?

どうやらz座標を補完してあげないと上手く動かないよう。

参考にしたサイト:https://gist.github.com/Buravo46/8367810

z座標をてきとうな値に設定すると(以下コードのmouse.z = 10f;の部分)

マウスの位置の変換が成功して、ログが出力されるようになった。Unityの3Dステージにも座標の変更が反映されているようだが、この辺りのロジックは不明。

マウスのカーソル的なものを3Dステージに反映させるために、スクリプトを少し変更。void Update()の最後にtransform.position = mouse3d;を追加。これまでは(何となく)Planeオブジェクトにスクリプトをくっつけていたが、そちらは取り除き、新しく作ったピンクのCubeに修正したスクリプトをくっつける。transform.position = mouse3dの意味は、「位置座標にmouse3dの座標を代入」。どのオブジェクトの位置座標というのを記載していないため、スクリプトをくっつけたオブジェクトの位置座標を指すことになるので、ピンクのCubeの位置座標に、マウスの位置座標が代入されることになる。

マウスの位置に対応して、ピンクのCubeが動くようになった。これにもうちょっとスクリプトを付けていけば、マウスをコントローラー(ポインター)にして3Dオブジェクトを操作できるような気がする。

おすすめの記事

1

発生した問題 端末にSIMカードを挿してapn設定画面に入ると、はじめからYmobileという名前のapn設定が登録されていた。apn、ID、PASS等はYmobileの公式ページhttps://ww ...

2

ArduinoにBluetoothモジュール、温度センサを繋げて、読み取った温度をAndroidスマホに送信するというものを作ってみた。   Arduino + 温度センサで温度センサの値を ...

3

Unityでステージを作成し、ステージの中のボタンをViveのコントローラーでクリックすると、kobuki(TurtleBot2)へメッセージが送信され、動作させることができるというものを作ったのでい ...

-Unity(ユニティー)

Copyright© 電子工作ブログ , 2019 All Rights Reserved Powered by STINGER.