今回の内容
前回に続いてドラゴンの作成です。
今回は吐き出す炎の調整を行っていきます。
※初めての方はこちらから
⇒ 【第1回記事】この連載について
炎のエフェクトを加工する
前回インポートしたエフェクト関連のアセットの中にある炎のアセットを利用します。
使うのは、EffectExamples > FireExplosionEffects > Prefabs > FlamesParticleEffect です。
こちらを選択したら、「Ctrl + D」で複製して、名前を「DragonFlame」に変更しましょう。
さらにこれを、Assets > Prefabs 以下に移動しておいてください。
この後は複製した DragonFlame を加工していきますが、デフォルトでは以下のようなエフェクトになっています。
では調整をしていきます。
まずは Transform を以下に設定してください。
回転に関しては Z軸が水平方向を向くように(0, 0, 0)としています。
スケールは後程わかりますが、ドラゴンとのサイズ調整のための設定となっています。
次に、ParticleSystemコンポーネントを調整します。
細かいですが、以下の赤枠の項目を変更してください。
それぞれの簡易的な説明ですが、
Start Speed 炎の粒1つ1つの速度。(Z軸方向にに進むように)
Simulation Speed 再生スピードの調整。
Rate over Time 秒間にいくつの粒を発生させるか。(炎の密度の調整)
Shape 粒の放出される形状。(形状に沿って放出される)
Angle Shapeで設定したコーン。(円柱)の角度。この場合は直線的になる。
あまり細かい説明をすると話がそれる箇所なので、特徴については上記を見ながら値を変更して確認してみてください。
上記の設定により、DragonFlame は以下のような形状となります。
これをドラゴンの炎に置き換えてみましょう。
GameScene3 の GreenDragon の子要素として DragonFlame を配置してください。
デフォルトは非表示とするので、配置したらアクティブのチェックを外しましょう。
さらに GreenDragon の DragonScript の Fire に設定してください。
最後に炎の放出位置がドラゴンの口元となるよう、
DragonFlame の位置を以下に設定してください。
ここまでで一旦 GameScene3 を再生してみましょう。
以下の様に、プレイヤーを検知すると炎のエフェクトを吐き出すようになります。
ここまでで見た目上の作成はおよそ完成となります。
現状ではまだプレイヤーと炎が接触しても何も起こらないので、その対応をこの次のセクションで行います。
また、炎の位置などは仮置きだんかいとなるので、今後アニメーションとの兼ね合いで再度微調整をする可能性があります。
プレイヤーと炎の当たり判定を設定する
DragonFlame とプレイヤーとの当たり判定の対応としては大きく以下の2つです。
1.DragonFlame にコライダーを設定
2.DragonFlame にスクリプトをアタッチ
プロトタイプの Fire と同様にするのであれば、
適当なサイズの BoxCollider をアタッチして、既存の FireScript をアタッチすれば済みます。
ただ今回はパーティクルシステムのコライダー機能を利用したいと思います。
プロジェクトビューで Prefabs > DragonFlame を選択して下さい。
ParticleSystem コンポーネントで以下を設定してください。
以下の5項目を変更しています。
1.Collision にチェック
2.Type を World に
3.Bounce を 0 に
4.Radius Scale を 0(0.0001)に
5.Send Collision Messages にチェック
簡単な解説ですが、上記5項目はおよそ2つの目的に分類することができ、
目的1 パーティクルのコライダーを有効にする(1、2、5)
目的2 パーティクル同士の衝突の影響を軽微にする(3、4)
となっています。
目的1は特に大事で、これらの対応を行うことにより、
OnParticleCollision 等のイベントを利用できるようになります。
実際にスクリプトを作成して上記イベントを使っていきます。
Assets > Scripts 以下に DragonFlameScript を作成してください。
スクリプトの中身は以下を記述しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragonFlameScript : MonoBehaviour { void OnParticleCollision(GameObject other) { switch (other.gameObject.tag) { case "Player" : other.gameObject.GetComponent<PlayerScript>().isDamaged = true ; break ; } } } |
OnParticleCollision がパーティクルが何かに衝突した際に実行されるイベントです。
中の処理は、以前作成した FireScript と同様で、プレイヤーにダメージを与えています。
作成ができたらプレハブの DragonFlame にアタッチしてください。
シーンを再生して、プレイヤーと接触するとゲームオーバーとなれば成功です。
一旦これで、炎関連の作成は完了となります。
最後にプレハブの整理として、以下を行っておきましょう。
1.GreenDragon の子要素 Fire を削除
2.GreenDragon のプレハブを更新
おわりに
今回はドラゴンの炎の本実装を行いました。
パーティクルシステムについては設定項目が膨大なため使った箇所を簡単に触れた程度ですが、
ある程度使いこなせるとゲームの見た目を一気に向上させられるので、是非いろいろ触ってみて下さい。
次回はドラゴンのアニメーションや微調整などを行って、ドラゴンに作成を完了させたいと思います!
連載目次リンク
関連する連載リンク
© Unity Technologies Japan/UCL