[Unity] レーザー距離計を作ってみた

By | 2015-01-14

今回はUnityのネタ的なTipsです。

物体との距離を測る距離計を実装してみました。
Unityで自律移動ロボットのシミュレータを作りたいと思ったのがきっかけです。

実装方針

ある点から物体までの距離はRaycastにより計算できます。
自分の位置、計測方向のベクトルを指定すれば距離を取得できます。
物体にはあらかじめコライダーを設定しておく必要があります。
より正確な距離を計測する場合はMeshColliderが良いでしょう。

また、距離計測には直結しないがレーザーっぽく見せるために計測方向に照射するSpotLightを設置することにします。

作ってみる

毎フレームごとに前方の物体との距離計算を行うスクリプトを実装します。
今回は以下のようなスクリプトを実装してみました。

transform.TransformDirection(Vector3.forward)がGameObjectの前方を表すベクトルです。
Vector3.forwardは(0,0,1)のローカル座標系における前方ベクトルです。
これをワールド座標系に変換するためにTransformDirection()メソッドを使っています。

Physics.Raycast(transform.position, fwd, out hit, maxDistance)でRaycastを飛ばして距離計算を行っています。
引数にはそれぞれ計測位置、向きベクトル、Raycastのヒット情報、計測可能範囲の距離を指定します。
物体にRaycastが当たればtrueが返り、hit.distanceに計測距離が格納されます。

上記スクリプトを距離計としたいGameObjectにアタッチします。
MaxDistanceには測定可能な最大距離を指定します。

同時に、Lightもアタッチします。
LightのTypeをSpot、SpotAngleを1、ColorをRGB=(255,0,0)、Intensityを8にすればレーザーっぽいライトが出来ます。

distance-sensor

ひとまずこれでレーザー距離計は完成です。
これを操作可能なプレイヤーに持たせて動かすと以下のように距離が測定できます。

需要があるかどうか分かりませんが、こんなことも出来るという紹介でした。

3 thoughts on “[Unity] レーザー距離計を作ってみた

  1. Jbuta

    助かります!
    レイを下に飛ばしてらっかダメージを計算するのに使いたいと思います!

    Reply
    1. ftvoid Post author

      返信遅くなりすみません。
      お役に立てて何よりです!

      Reply
  2. kopu

    面白いですね!
    これからの時代、需要ありそうですね。

    Reply

コメントを残す

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