【第13日目】UnityとPUN2とC#でParticleSystemを使用する

 

 

こんにちは、今回はパーティクルシステムを使用しようと思います。

マナトークンが消費されたときに何も効果が無いと、気分が上がらないのが理由です。

消費された音に合わせて、シュワシュワッと何かエフェクトが出るようにしていきたいと思います。

 

それでは、まずはパーティクルを置いてみるところから始めたいと思います。

UnityとPUN2とC#でParticleSystemを使う下準備

今回ParticleSystemを初めて使うので、とりあえず、置いてみました。

ヒエラルキービューからGameObject>Effects>ParticleSystemで原点に出てきます。

上のようにホワホワした何かが上方に上がっていきます。

 

このままスケールを調整して使ってもいいのですが、せっかくなのでコンセプトに合わせて改造しようと思いました。

今回使用しているパラメーター

冒頭のイメージのような縦に長いモニョモニョにするために、チェックが入っている項目をいじりました。

プルダウンが出てないところはデフォルトのままです。

 

一番影響があったのはColor over Lifetimeで、左から右へと色が遷移するようになっています。

白い四角(デフォルト)をクリックすると、グラデーションを自分で作成することができます。

 

ParticleSystemがモニョったのはNoiseのせいですね。Noiseなしだと、上にストレートに上がっていきます。

 

あとは、名前の通りなので、ほぼ予想通りの挙動をするようになっています。

問題はこれをどうやってプレイしたらいいかという事ですが、これが実に簡単だったので、やり方を残しておきます。

マナトークンが破壊された瞬間にパーティクルをインスタンス化する

マナトークンが破壊されたタイミングでエフェクトを出したいので、下のOnDestroy関数をマナトークンにつけておきます。

そして、ParticleSystemをスクリプトからParticleSystem hogeと取得しておきます。

マナトークンにスクリプトをアタッチしたら、ドラッグアンドドロップでParticleSystemを落とし込みます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;

public class ManaDestroy : MonoBehaviour
{
    [SerializeField] ParticleSystem particle;
    private void OnDestroy()
    {
        Instantiate(particle, transform.position, Quaternion.Euler(-90, 0, 0));
    }
 
}

 

OnDestroy関数にはInstantiateでアタッチされたパーティクルを呼ぶスクリプトを入れます。

これを最初はPhotonNetwork.Instatiateにしていたのですが、私はParticleSystem自体にPhotonViewを付けていたので、普通のInstantiateをするだけで双方のプレイヤーに見えます。

PhotonNetwork.Instatiateと、PhotonViewの組み合わせだと2つ出てきてしまうので注意です。

 

ParticleSystemを実行する関数は今回は仕込まずに、デフォルトでチェックおはいっているPlay On Awakeを使用する事にしました。

それでは、このParticlePlayには何が入っているかというと、プレイが終わった時に自動で自身を破壊するスクリプトが入っています。

ParticleSystemはオブジェクトと同様に場に残ります。プレイが終わっても溜まっていくので、自動破壊機能がないと重くなります。

そこで、付けたスクリプトは以下です。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class ParticlePlay : MonoBehaviour
{

    [SerializeField] ParticleSystem particle;

    void Update()
    {
        if (particle.isStopped) //パーティクルが終了したか判別
        {
            Destroy(this.gameObject);//パーティクル用ゲームオブジェクトを削除
        }
    }
}

 

これでマナトークンが破壊された時に、OnDestroyが呼ばれ、自動消滅機能付きParticleSystemが場に呼び出され、Play On Awakeで再生して、終わり次第消えるという流れになります。

これらのスクリプトはこのサイトを参考にして書いています。

おわりに

今回はエフェクトとしてParticleSystemを使用しました。

初めてですが、かなり使い勝手が良いなと思いました。

 

パーティクルの長さと、プレイ音を合わせる事で本当にマナトークンが消費されたように感じて結構爽快です。

次回はマナトークンの補充やカードの能力追加等を明日の気分で考えようと思います。

 

これからもどうぞよろしくお願いします。

それでは、また!

 

 

おすすめの記事