スクリーンショット_2018-10-21_17

Unity で物体の軌跡を描画したい

なにか物体が動いたときの軌跡を描画したい。
そんなときってありますよね。
今回はそういう記事です。

方針

1. LineRendererを使う
2. updateごとに以下の処理を行う
2.1. LineRendererの頂点数を増やす
2.2. LineRendererの頂点の座標に物体の現在の位置をセットする

これでいけそうな気がします。
ではシンプルなコードです。

using UnityEngine;

public class DrawLine : MonoBehaviour {

    /*
     * オブジェクトの軌跡を描画する
     */

    LineRenderer line; // LineRendererコンポーネントを受ける変数
    int count; // 線の頂点の数

    void Start () 
    {
        line = GetComponent<LineRenderer>(); // LineRendererコンポーネントを取得
	}

    void FixedUpdate() // updateでもいいけど,fixedのほうが今回都合がいい
    {
        count += 1; // 頂点数を1つ増やす
        line.positionCount = count; // 頂点数の更新
        line.SetPosition(count - 1, transform.position); // オブジェクトの位置情報をセット
    }
}

このスクリプトを軌跡を描画したいオブジェクトにアタッチして,LineRendererコンポーネントもアタッチすると動くはずです。

今回のボールくんのコンポーネントはこんな感じになっています。

LineRendererの雑な解説

positionsっていうVector3がつらなってるリストのようなものがあってそれらの座標を順番に結ぶ形で線を描画しています。

Inspector上で見るとこういうやつです。

0から1,1から2,2から3 を結んでいって一本の線になるって要領です。

そういうわけで,このpositionsをupdateのたびに1つずつ増やして,それと同時に現在のオブジェクトの位置をぶち込んでやれば軌跡になるということですね。

線くらいもっと簡単に引けたらいいのにって思います。

最後まで読んでもらえて嬉しいです。よければフォローもお待ちしています。サポートは記事を書くときのコーヒーになります。