Unityのエフェクトでの剣の軌跡の作り方
前回までの記事で以下のようにIKを使用することで足が浮かないようにした。前回までの記事↓
TPSのキャラ移動
ジャンプ
ダッシュ実装
自作キャラを動き回らせる
剣を振る方法
剣コンボ
足が浮く対策
使用フリー素材(2023年3月現在はフリー)↓
・剣素材
・剣を振るアニメーション
左クリックすることで剣を振る動作はできているが、イマイチ派手さが足りないと思う。
そこで今回はエフェクトのTrailを使って剣を振った際の軌跡を作るやり方を紹介していく。
Trailで剣の軌跡を作る目次
Trailの作成方法と基本emittingの活用
目次にもどる
Trailの作成方法と基本
Trailは英語で「人や物が移動してできた跡」という意味がある。その意味通り剣の軌跡を描くのに適している。作り方手順は以下の通り。①GameObject→Effects→Trailのように選択する(ヒエラルキー欄からEffects→Trailのように選択してもOK)
②ヒエラルキー欄にTrailというゲームオブジェクトが表示される。Trailを剣の子のゲームオブジェクトにしよう。
これで剣の動きに追従してTrailが動くようになった。ここからTrailを調整して剣の軌跡にしていく。
次に剣に合うようにTrailの位置を合わせる。剣の先のほうに配置しよう。
続いてTrailを選択し、インスペクター欄のTrail Rendererのコンポーネントを見てほしい。
赤い線が出ているグラフは幅を変更できる。縦軸がTrailの幅、横軸が時間をあらわしている。縦軸の記述を書き換えれば幅を変更できる。
最初は赤線は横一線となっており時間経過で幅は変化しない。だが、グラフ内でダブルクリックすることで点を追加できる。この点を移動させることで時間経過で幅が変わるように調整できる(点は複数追加可能)。
今回は以上のように段々と幅が狭くなっていくように調整した。
TimeはTrailが残っている時間を示す。
これはデフォルトでは5となっている(つまり5秒)。剣の軌跡を描く場合には長すぎるので0.2とした。
Min Vertex Distanceは新しいセグメントが描写されるためにゲームオブジェクトが移動せねばならない距離だ。
この値が小さいほど軌跡が滑らかに表示されやすくなる(軌跡の移動方向にもよるが、値が大きいと角ばって描写されてしまうこともある)。とはいえ値を小さくしすぎると負荷も大きくなる。今回は0.1に設定した。
Colorはその名の通り、Trailの色を指定可能。
Colorの項目の色がついている部分を選択すると以下のような画面が出る。
左から右に向かって時間経過し色が変化していく。
下にあるアイコンを選択することでColorの設定が見られる(下アイコンをDeleteして1つにすれば色を変化させないこともできる)。下アイコンがあるラインをクリックすることでアイコンを増やして色の移り変わりを細かく表現できる。
Colorの設定項目の色がついている部分を選択すると以下のような画面が出るので外側の色を選択し大まかな色を選び、中の色選択で細かく色を決められる。
上側のアイコンではAlpha値の調整が可能。これは透明度を示している(0だと完全に透明となる)。このアイコンも上アイコンラインをクリックで増やすことができ移り変わりを細かく表現できる。
上側アイコン一番左のAlpha値を255にし、上側アイコン一番右のAlpha値を0にすれば、徐々に軌跡が薄くなっていくという表現も可能。
Modeは色の移り変わり型を示す。デフォルトではBlendとなっており、徐々に色が変化する。
Fixedにすると下側Colarアイコンの位置でいきなり色が変わるようになる。
Colorの設定時の注意点だが、Timeの値との兼ね合いはよく考えよう。いくら色変化の設定を細かくしたとしてもTimeが短いと色変化する前にTrailが消えてしまうことが多い。
Colorが移り変わっていくことはわかっても何秒でどうなるかがわかりにくい(Color設定画面にはなぜか時間表記がない)。細かく確実にColor設定を行いたい場合は今回は紹介しないがスクリプトでやったほうがいいかも。
今回は剣の軌跡なので最初から薄めにして最後は特に薄くするように設定した(Alpha値30→0。色は一応青にした)。
Materialsは今回はデフォルトのDefault-Lineのままで変更はしない。
ただ、マテリアルによって軌跡の形や色などを変化させられるので覚えておこう。
以上で今回のTrail Rendererの設定は完了だ。 目次にもどる
emittingの活用
これまでの設定だけで剣の軌跡は出るようになる。ただ、問題なのが以下のように剣を持って移動しているだけでも軌跡が出てしまう点。
また、剣を振るAnimationClipを見ても、剣を振る動作だけで構成されているわけではない。剣を振る前の構えなどの予備動作→剣を振るといった構成となっている。何もしなければ予備動作の時点で軌跡が出てしまう。
不自然にならないよう、剣の軌跡が出るのは剣を振っている時のみにする必要がある。
そこで使えるのがTrail Rendererのemittingという項目だ。
emittingにチェックが入っていると移動している際にTrailが描画される。
emittingのチェックはスクリプトへの記述でも変更可能となっている。よってスクリプトでemittingのチェックをつけたり外したりすることで、剣を振った時のみ描画が行われ軌跡が出るようにしていく。
まずはAnimationClipへのイベント追加を行う。前回のコンボ攻撃作成記事で以下のようなAnimationClipを使用している。
攻撃1回目…2 Hand-Sword-Attack 2
攻撃2回目…2 Hand-Sword-Attack 8
攻撃3回目…2 Hand-Sword-Attack 1
攻撃4回目…2 Hand-Sword-Attack 4
この4つのAnimationClip全てに、AttackStartのメソッドを呼び出すイベントを作成する。位置は各AnimationClipを見て、剣を降り始めたタイミングにしよう。
FBXファイルのインスペクター欄の一番下で以下のようにアニメーションを再生することが可能。剣を振り始めた位置で停止し、少し上にあるEventsの項目を開くと停止した位置が線で表示されるので、その位置にイベントを作ればいい。
剣を降り終わった位置を示すイベントも本来は必要だが、このアセットの場合は最初から振り終わりにHitを呼び出すイベントを作ってくれているので、今回はそれを利用すればいい。
スクリプトの記述は以下の通り。
[SerializeField] GameObject TrailObject;としてシリアル化を行ってある。Trailのゲームオブジェクトを指定している。
そしてStartメソッドではKiseki = TrailObject.GetComponent
続いてKiseki.emitting = false;と記述することで、emittingのチェックを外すことができる。
そして、AttackStartとHitのメソッドの記述は以下の通り。
新しく作成したAttackStartメソッドではemittingのチェックを入れ、Hitメソッドではemittingのチェックを外すように記述している。
今回のスクリプト記述を行いPlayerにアタッチして再生すれば、以下のように剣を振った時のみ軌跡エフェクトがでるようにすることができる。
続きの記事は以下。
燃える剣の必殺技作成