ゲーム制作勉強中!あこがれだったプログラマーに今からなろう!

昔、あこがれていたプログラマー。今からでも勉強してみようと思い立ち、チャレンジ開始! 勉強メモや、悪戦苦闘な日々の記録です。

3Dアクションゲームを作ろう(10):回復エリアの実装。聖域を作る。

川ぽちゃGameOverを作ったので、次はHPの回復場所を作る事にした。
例によって、あちこちのサイトやyoutubeを漁っていたら、簡単に魔法陣っぽいのを作成する動画を見つけた。

www.youtube.com

2つのParticle Systemで魔法陣と、そこから立ち上る光を作り分けるらしい。
早速、実践してみた。
自分流にアレンジを加えて、こんな感じのを作成した。

www.youtube.com

アレンジしたのはサークル側の、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


さて、次は、何を作ろうかな〜〜