UnityのTrailRendererを使って弾の軌跡を表示する

今回はUnityのTrailRendererを使ってゲームオブジェクトの軌跡を表示してみようと思います。

TrailRendererをゲームオブジェクトに設定すれば、そのゲームオブジェクトが動いた後に自動でメッシュを作成し軌跡を表現する事が出来ます。

例えばアニメ風のゲームを作成する場合等はキャラクターが移動した後に軌跡を表示したり、銃を撃つゲームならば弾の軌道を表示したりする事が出来ます。

今回はTrailRendererを使って、その弾の軌跡を表示する機能を作成していきたいと思います。

↑のような感じですね、その他にキャラクターが移動した後に軌跡を残す機能も作ってみたいと思います。

スポンサーリンク

TrailRendererの設定

TrailRendererはインスペクタのAdd ComponentからEffects→Trail Rendererを選択し、ゲームオブジェクトに取り付ける事が出来ます。

TrailRendererの設定項目

設定項目はLineRendererとほとんど同じなので、簡単な説明だけしていきます。

UnityのLineRendererを使うと指定した点を繋いだメッシュを作成する事が出来ます。LineRendererの設定項目を細かく見ていき簡単なサンプルを作成してみます。
  • Cast ShadowをOnにすると影を表示します。
  • Receive Shadowにチェックを入れるとメッシュ上に影が投影されます。
  • Motion Vectorsはモーションベクタータイプの設定。
  • Materialsはメッシュに適用するマテリアルの指定。
  • LightMap ParametersはLightMap Parameterを指定。
  • Timeは軌跡を表示する秒数。
  • Min Vertex Distanceはメッシュを生成する最小の距離を指定するので、値が小さいほど細かくメッシュが作成されます。
  • Autodestructにチェックを入れるとTimeで指定した秒数アイドル状態が続いたらTrailRendererを削除します。
  • Widthはメッシュの幅の最大値を指定し、その下のグラフで時間経過での幅の推移を指定出来ます。
  • Colorは時間経過での色と不透明度の設定。
  • Corner Verticesはメッシュのカーブでの頂点数。
  • End Cap Verticesは最初と最後の線の頂点数。
  • AlignmentはViewで線をカメラの向き、Localはコンポーネントの向きに合わせます。
  • Texture Modeでは指定したマテリアルのテクスチャの貼り付け方の設定です。
  • Light Probes、Reflection Probesは省略します・・・・(-_-)。
  • ほぼLineRendererの設定項目と同じですね。

    弾の軌跡を表示してみる

    TrailRendererの設定項目がわかったので、実際に使ってみましょう。

    カメラの正面から弾を飛ばし、その弾の軌跡をTrailRendererを使って表示する機能を作成していきます。

    弾のプレハブを作成する

    まずはカメラから飛ばす弾を作成していきます。

    ヒエラルキー上で右クリックし、3D Object→Sphereを選択して名前をBulletとします。

    TransformのScaleをX、Y、Z全て0.1にします。

    Sphereを弾に見立てる

    弾はRigidbodyに力を加えて飛ばす為、BulletのインスペクタのAdd Componentを押してPhysics→Rigidbodyを取り付けます。

    また、弾が飛んで行った時の軌跡はTrailRendererを使って表示するので、Add Component→Effects→Trail Rendererを選択し取り付けます。

    弾にRigidbodyとTrailRendererを取り付ける

    RigidbodyのMassを0.01にし弾の質量を10gほどに設定します。

    Collision DetectionをContinuous Dynamicに設定し連続した衝突に対応出来るようにし、弾が速くても他のゲームオブジェクトと衝突出来るようにします。

    Trail RendererではCast ShadowsをOff、Receive Shadowのチェックを外し影の影響をなくします。

    MaterialsのElement0には弾の軌跡用のマテリアルを作成し設定します。

    Assetsフォルダで右クリック→Create→Materialを選択し、名前をBulletTrailにします。

    弾用のマテリアルの設定

    ShaderをParticle Alpha Blendにし、Tint ColorのR、G、Bを0、Aを50にし、黒で色が透けている状態にします。

    Timeは1にし、1秒後にメッシュを消します(移動と共に新しい物が作られていき、古いのが消えていきます)。

    Widthは0.5にし、グラフの線上で右クリック→Add Keyでキーを追加し、右のキーをドラッグし0にします。

    こうすることで弾付近では幅のある軌跡が段々と狭まっていきます。

    Corner Verticesを10にし、AlignmentをLocalにします。

    これで弾が出来上がったのでヒエラルキー上のBulletをAssetsフォルダにドラッグ&ドロップしてプレハブ化します。

    弾を飛ばすスクリプトの作成

    次は弾をカメラの中心から前方に飛ばすスクリプトを作成します。

    スクリプトはMain Cameraに取り付けます。

    bulletには弾のプレハブをインスペクタで設定出来るようにし、powerは弾を飛ばす力を設定出来るようにします。

    マウスの左ボタンを押したら弾のプレハブをtransform.positionでカメラの位置、Quaternion.identityでカメラの角度でインスタンス化します。

    Destoryを使ってインスタンス化した弾を5秒後に削除するようにします。

    その後、弾のRigidbodyを取得しAddForceでカメラの前方に力を加えて飛ばします。

    ForceMode.Forceで質量を使って連続的に力を加えるモードにしました。

    カメラをマウス操作で回転させる

    カメラの正面に弾を飛ばす事が出来るようになりましたが、ずっと同じ向きではTrailRendererの機能を確認し辛いので、スタンダードアセットのUtilityにあるSimpleMouseRotaterを取り付けカメラを回転出来るようにします。

    SimpleMouseRotaterに関しては

    UnityのスタンダードアセットのUtilityにあるSimpleMouseRotaterを使ってゲームオブジェクトやカメラをマウス操作で回転させます。

    を参照してください。

    Main Cameraのインスペクタは

    弾を飛ばすメインカメラの設定

    ↑のようになります。

    これで機能が出来上がりました。

    確認すると最初の方に載せた動画のようにカメラの中心から弾を飛ばし、その弾の軌跡が確認出来ると思います。

    弾の軌跡を表示した画像

    ↑のように弾の軌道に沿って軌跡が表示されています。

    キャラクターが通った後に軌跡を表示する

    キャラクターが通った後にTrailRendererを使って軌跡を表示してみます。

    動くキャラクターの設置

    まずはキーボード操作で動かせるキャラクターを設置します。

    Assets→Standard Assets→Characters→ThirdPersonCharacter→Prefabs→ThirdPersonControllerをヒエラルキー上にドラッグ&ドロップします。

    スタンダードアセットをインポートしていない方はUnityメニューからAssets→Import Package→Charactersを選択しインポートします。

    インスペクタのThirdPersonCharacterでMoveSpeedMultiplierを0.5にします。

    TrailRendererのサンプルで使う移動キャラクター

    ↑のような感じになります。

    TrailRendererの取り付け

    キャラクターの子要素に空のゲームオブジェクトを作成し名前をEthanTrailとします。

    EthanTrailのインスペクタのAdd ComponentからEffects→Trail Rendererを選択し取り付けます。

    TrailRendererの設定を変更し、マテリアルを設定します。

    キャラクターの軌跡を描くTrailRendererの設定

    EthanTrailのTransformでY軸の位置を少し上げ、RotationのX軸で回転させキャラクターと水平にメッシュが表示されるようにします。

    Min Distanceを0.5にし多少メッシュの作成に距離を持たせ処理を軽くさせます。

    マテリアルには

    LineRendererに設定するマテリアル

    ↑のようなテクスチャを設定したマテリアルを指定しました。

    このマテリアルを設定したのはTexture Modeの設定で上下左右のテクスチャがどう張られるかわかりやすくする為です。

    これで機能が完成しました。

    キャラクターを動かし、キャラクターの背後にメッシュが表示されるかどうか確認してみます。

    ↑のようになりました。

    TrailRendererを使うと簡単にゲームオブジェクトの軌跡を表示する事が出来ますね。

    剣の軌跡なんかも簡単に出来そうな気がしましたが、わたくしには出来ませんでした・・・(^_^;)

    剣の軌跡に関してはスクリプトからメッシュを作成して作る方法を別の記事でやりたいと思います。

    参考サイト

    UnityマニュアルーTrail Rendererー

    スポンサーリンク

    記事をシェアして頂ける方はこちら

    フォローして頂くとやる気が出ます