LineRendererでGameObjectの周りを線を囲いたい

やりたいこと

① 複数のマーカー(GameObject)の間を線で囲いたい

f:id:ryu955:20180330001325p:plain:w300

② マーカーが増えたときも、それに合わせて線で囲ってほしい

f:id:ryu955:20180330001340p:plain:w300

環境

名前 バージョン
macOS Sieera 10.12.6
Unity 2017.1.0f3 Personal

線を引く

Unityで線を引く方法はいくつかあるが*1、今回はこの中で扱いが楽そうなLineRendererを使うことにした。

LineRendererは LineRenderer.numPositions 頂点の数を設定し、LineRenderer.SetPosition(int,Vecter3) 描画したい頂点の順番と座標を引数に線を描画することができる。

動的に線を描画

コードはこんな感じ。

foreachでリストを回してるだけ。

見た目はこんな感じ(デモ用に markerList の中に3つcubeを入れてある)。

f:id:ryu955:20180330012657p:plain

悩んだのは頂点の数を変える際、 LineRenderer.numPositions で設定する頂点の数はconstになると思ってたら、普通に変えることができた。

markerList にGameObjectを追加しても描画してくれるし、GameObjectの座標を変えても線が追従してくれる様になった。

https://gyazo.com/3575bd2d9b96221928d6336b30661aff

線を囲う

とりあえずマーカー同士を線で結ぶことはできたけど、囲うことはできてない。

f:id:ryu955:20180330010024p:plain:w300

なので、Inspectorをいじると、

f:id:ryu955:20180330013343p:plain:w300

いい感じになった。

f:id:ryu955:20180330013403p:plain:w300

雑記

ブログを書く前は、LineRendererのinspectorにroopの設定があることを知らずに、線を囲うために下のコードで無理やりやっていた。

ブログを書くためにLineRendererについて再度調べてるうちに、roopを見つけてこれでいいじゃん…ってなった。