最強寒波とやらで極寒の中、健気にエナジードリンクのサンプルを配布しているお姉さんがいたので、「くそ寒いから要らないけど貰ってあげよう、可哀そうだし、家に持って帰って飲もう」と思って、鼻の下が伸びないように注意しながらお姉さんに近寄っていったのですが、そのお姉さんが「ありがとうございます。」とか言いながら、プシュッと蓋を開けて渡したわけです。
ここで飲めと?
とりあえず、雪が舞う中 でエナジードリンク飲んでも体は暖かくならないことは分かりました。
さて、移動するキャラクターが土煙を巻き上げて走っているように見せたい場合、キャラクターの足元に煙のパーティクルを出す方法があるみたいです。
車やバイクとか高速で移動する物体だとこの表現で十分なのですが、一般的な人型のキャラクターにこれを付けるとちょっとオーバーかな?と思えたり。みんなアラレちゃんになるし。
できれば一定間隔で土煙が巻き上がる感じの表現にしたい。
こんな感じで。
なので、その方法を模索してみまた。
まず、土煙のパーティクル本体に以下のスクリプトを設定して、パーティクル再生後に一定期間で消滅するようにします。
public class Dust_AutoDestructShuriken : MonoBehaviour { // 生存時間 float lifeTime; public void OnCheckOn() { // パーティクルの開始 ParticleSystem myParticleSys = this.GetComponent<ParticleSystem>(); myParticleSys.Play(); // アクティブ監視処理実行 StartCoroutine("CheckIfAlive"); } IEnumerator CheckIfAlive() { while (true) { yield return new WaitForSeconds(lifeTime); if (!GetComponent<ParticleSystem>().IsAlive(true)) { GameObject.Destroy(this.gameObject); } } } }
次に、上記のスクリプトを設定したパーティクルオブジェクトが一定間隔で生成されるように、走るキャラクターオブジェクト側に以下のスクリプトを設定。
Update関数で一定時間間隔でパーティクルオブジェクトが生成されます。
// タイムアウト時間 float timeOut;
// 土煙のパーティクルオブジェクト
BackDustPrefab void Update () { timeElapsed -= Time.deltaTime; // タイムアウト発生時 if (timeElapsed <= 0) { // 走行時の砂埃エフェクト生成 RunEffectCreate(); timeElapsed = timeOut; } } /// <summary> /// 走行時の砂埃エフェクト生成 /// </summary> public void RunEffectCreate() { // エフェクトオブジェクトの生成 GameObject crObj = Instantiate(BackDustPrefab, Vector3.zero, Quaternion.identity, this.transform.parent); crObj.transform.localPosition = this.transform.localPosition; // エフェクトの実行 Dust_AutoDestructShuriken crPar = crObj.GetComponent<Dust_AutoDestructShuriken>(); crPar.OnCheckOn(); }
ここで気を付けるのは生成するパーティクルオブジェクトがキャラクターオブジェクトの子オブジェクトにはならないようにすること。
子オブジェクトにするとキャラクターにくっ付いて一緒に移動してしまいます。
これを実際のゲーム画面(開発中)で動かしてみるとこんな感じ。
ハイ、そこ!オナラしてる、とか言わない!