川ぽちゃGameOverを作ったので、次はHPの回復場所を作る事にした。
例によって、あちこちのサイトやyoutubeを漁っていたら、簡単に魔法陣っぽいのを作成する動画を見つけた。
2つのParticle Systemで魔法陣と、そこから立ち上る光を作り分けるらしい。
早速、実践してみた。
自分流にアレンジを加えて、こんな感じのを作成した。
アレンジしたのはサークル側の、Particle自身の色を透明にして、トレイルを色を白から水色のグラデーションに
トレイルの生存期間を少し短めにして、格子模様がギリギリできるくらいで消えていく感じにした。
立ち上る光側は、Particleの生存期間を3〜6に幅を持たせて、トレイルは生存期間期間の色を水色と白で、2つの
色間でランダム。トレイル幅は0.3〜0.5と幅をつけてみた。
魔法陣っぽいものができたので、それを空オブジェクトで纏めてマップに実装。
近づいたら魔法陣が立ち上る様にしたいから、空オブジェクトにCapsule Colliderをトリガー設定でアタッチして
領域に侵入したらParticle Systemを再生する様にした。
次は、この領域に入ったときにPlayerのHPを回復させる機能の実装になるのだが、
この領域に入って、かつ、じっとしていたら徐々にHPを回復させたいので、Playerが動いていない時の判定も作る事にした。
具体的にはPlayer ControllerにIsMovingとHolyAreaという二つのBool変数を作成してやり、
Updateメソッドの最初で、このIsMovingをfalse(動いていない)にし、Update内での移動や攻撃、ジャンプ判定の時点で
IsMovingをtrueに変えるようにした。
そして、先ほどの魔法陣側にHolyAreaというC#スクリプトを作成し、領域に侵入(OnTriggerEnter)したら、PlayerのHolyArea変数
をtrueにしてやる様にする。
これで、この領域に入って、かつ、じっとしていたら徐々にHPを回復の判定が成り立つ。
HolyAreaスクリプトはこんな感じに組んだ。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HolyArea : MonoBehaviour { public ParticleSystem circle; public ParticleSystem flash; private void OnTriggerEnter(Collider other) { if(other.tag=="Player") { if(circle.IsAlive()==false) //circleは息が長いエフェクトなのでプレイ状況を調べている。 { circle.Play(); //止まっているならcircleエフェクトを再生。 } flash.Play(); //PlayerのHolyArea変数をtrue other.GetComponent<PlayerController>().HolyArea=true; } } private void OnTriggerExit(Collider other) { if(other.tag=="Player") { circle.Stop(); //circleエフェクトを止めて circle.Clear(); //消すw flash.Stop(); // 立ち上る光も止める //PlayerのHolyArea変数をfalse other.GetComponent<PlayerController>().HolyArea=false; } }
完成形はこんな感じになる。
youtu.be
さて、次は、何を作ろうかな〜〜