今回はUnityのTrailRendererを使ってゲームオブジェクトの軌跡を表示してみようと思います。
TrailRendererをゲームオブジェクトに設定すれば、そのゲームオブジェクトが動いた後に自動でメッシュを作成し軌跡を表現する事が出来ます。
例えばアニメ風のゲームを作成する場合等はキャラクターが移動した後に軌跡を表示したり、銃を撃つゲームならば弾の軌道を表示したりする事が出来ます。
今回はTrailRendererを使って、その弾の軌跡を表示する機能を作成していきたいと思います。
↑のような感じですね、その他にキャラクターが移動した後に軌跡を残す機能も作ってみたいと思います。
TrailRendererの設定
TrailRendererはインスペクタのAdd ComponentからEffects→Trail Rendererを選択し、ゲームオブジェクトに取り付ける事が出来ます。
設定項目はLineRendererとほとんど同じなので、簡単な説明だけしていきます。
ほぼLineRendererの設定項目と同じですね。
弾の軌跡を表示してみる
TrailRendererの設定項目がわかったので、実際に使ってみましょう。
カメラの正面から弾を飛ばし、その弾の軌跡をTrailRendererを使って表示する機能を作成していきます。
弾のプレハブを作成する
まずはカメラから飛ばす弾を作成していきます。
ヒエラルキー上で右クリックし、3D Object→Sphereを選択して名前をBulletとします。
TransformのScaleをX、Y、Z全て0.1にします。
弾はRigidbodyに力を加えて飛ばす為、BulletのインスペクタのAdd Componentを押してPhysics→Rigidbodyを取り付けます。
また、弾が飛んで行った時の軌跡はTrailRendererを使って表示するので、Add Component→Effects→Trail Rendererを選択し取り付けます。
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に取り付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shot : MonoBehaviour { public GameObject bullet; public float power = 10; // Update is called once per frame void Update () { // 弾を生成 if (Input.GetButtonDown ("Fire1")) { GameObject obj; obj = Instantiate (bullet, transform.position, Quaternion.identity) as GameObject; Destroy (obj, 5f); obj.GetComponent<Rigidbody>().AddForce (transform.forward * power, ForceMode.Force); } } } |
bulletには弾のプレハブをインスペクタで設定出来るようにし、powerは弾を飛ばす力を設定出来るようにします。
マウスの左ボタンを押したら弾のプレハブをtransform.positionでカメラの位置、Quaternion.identityでカメラの角度でインスタンス化します。
Destoryを使ってインスタンス化した弾を5秒後に削除するようにします。
その後、弾のRigidbodyを取得しAddForceでカメラの前方に力を加えて飛ばします。
ForceMode.Forceで質量を使って連続的に力を加えるモードにしました。
カメラをマウス操作で回転させる
カメラの正面に弾を飛ばす事が出来るようになりましたが、ずっと同じ向きではTrailRendererの機能を確認し辛いので、スタンダードアセットのUtilityにあるSimpleMouseRotaterを取り付けカメラを回転出来るようにします。
SimpleMouseRotaterに関しては
を参照してください。
Main Cameraのインスペクタは
↑のようになります。
これで機能が出来上がりました。
確認すると最初の方に載せた動画のようにカメラの中心から弾を飛ばし、その弾の軌跡が確認出来ると思います。
↑のように弾の軌道に沿って軌跡が表示されています。
キャラクターが通った後に軌跡を表示する
キャラクターが通った後にTrailRendererを使って軌跡を表示してみます。
動くキャラクターの設置
まずはキーボード操作で動かせるキャラクターを設置します。
Assets→Standard Assets→Characters→ThirdPersonCharacter→Prefabs→ThirdPersonControllerをヒエラルキー上にドラッグ&ドロップします。
スタンダードアセットをインポートしていない方はUnityメニューからAssets→Import Package→Charactersを選択しインポートします。
インスペクタのThirdPersonCharacterでMoveSpeedMultiplierを0.5にします。
↑のような感じになります。
TrailRendererの取り付け
キャラクターの子要素に空のゲームオブジェクトを作成し名前をEthanTrailとします。
EthanTrailのインスペクタのAdd ComponentからEffects→Trail Rendererを選択し取り付けます。
TrailRendererの設定を変更し、マテリアルを設定します。
EthanTrailのTransformでY軸の位置を少し上げ、RotationのX軸で回転させキャラクターと水平にメッシュが表示されるようにします。
Min Distanceを0.5にし多少メッシュの作成に距離を持たせ処理を軽くさせます。
マテリアルには
↑のようなテクスチャを設定したマテリアルを指定しました。
このマテリアルを設定したのはTexture Modeの設定で上下左右のテクスチャがどう張られるかわかりやすくする為です。
これで機能が完成しました。
キャラクターを動かし、キャラクターの背後にメッシュが表示されるかどうか確認してみます。
↑のようになりました。
TrailRendererを使うと簡単にゲームオブジェクトの軌跡を表示する事が出来ますね。
剣の軌跡なんかも簡単に出来そうな気がしましたが、わたくしには出来ませんでした・・・(^_^;)
剣の軌跡に関してはスクリプトからメッシュを作成して作る方法を別の記事でやりたいと思います。