たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

Rigidbodyを使用しないでオブジェクトの軌道予測線を表示する

またVRゲームを作っていて、飛んでくるオブジェクトを斬っていくゲームなのですが、イメージとしてはSAO2期 9話「デス・ガン」でキリトがシノンを守って敵の弾丸を全て叩き落とした時のようなシーンを作り出したいなと思っていて、今回はそのゲーム世界の要素の一つである「弾丸の軌道予測線」の作り方についてまとめます。(わからない人はアニメ見てください!)

f:id:c_taquna:20181109015438g:plain
こんな感じで、オブジェクトを生成すると同時にその軌道を線で表示します。その線の軌道をオブジェクトが動きます。

使用したツール / 環境

  • Unity 2017.3.1f1

作り方

作り方は以下のステップです。

  1. オブジェクトを配置してPrefab化する(今回はCube)
  2. 子オブジェクト同士でLineRenderer
  3. スクリプトでオブジェクトを生成する

もう少しだけ細かく見てきましょう。

オブジェクトの配置

こんな感じで配置します。Line/StartPoint/EndPointはEmptyで作成して問題ありません。
f:id:c_taquna:20181110020135j:plain

Cube/Line/StartPointは同じ座標で問題ありませんが、EndPointだけZを"5"にしておきましょう。
f:id:c_taquna:20181110020320j:plain

LineRendererの設定

LineにLineRendererコンポーネントをAddします。
f:id:c_taquna:20181110020427j:plain

ここで、スクリプトを書きます。LineにAddしましょう。
gist.github.com
LineRendererのパラメータを指定しているだけです。

下記が今回のポイントです。

linerenderer.positionCount = 2;

// 線の開始地点と終了地点を指定する
// startPoint/endPointは最初にInspectorから指定しておく。
linerenderer.SetPosition(0, startPoint.transform.position);
linerenderer.SetPosition(1, endPoint.transform.position);

Prefabs化からのオブジェクト生成

上記ができたらPrefabs化して、スクリプトからInstantiateを使用して生成してみましょう。(別にそのままプレイモードにしてもちゃんと予測線が生成されますが。)

まとめ

という感じで、オブジェクトを生成するときに始点と終点に空のオブジェクトを置いておき、その2つを結ぶように線を引いてあげます。

感想

スクリプトから色がかえられないんだよなぁ、、、