チャージショットの記事で玉が床に衝突したときに、パーティクルを生成してみます。
そして、衝突のときの速度によってパーティクルの数を増やします。
まずヒエラルキーウィンドウで右クリックからパーティクルシステムを新規作成します。
これをプロジェクトのどこかのフォルダにドラッグアンドドロップしてプレハブ化し、ヒエラルキーウィンドウのパーティクルシステムは削除します。
このプレハブをダブルクリックして、インスペクタでパーティクルの設定を変えます。
Durationを短くして、Loopingのチェックを外し、色を変えました。また、Collisionのチェックを入れてパーティクルが衝突できるようにしました。
畳まれた項目の中のEmmisionでパーティクルの個数を変えられます。
これをクリックして項目を開き、+ボタンを押します。
Burstが一つ作られます。この中のCountの値でパーティクルの数をスクリプトから変更できます。
スクリプトでCountの値を変える
床のオブジェクトに新規スクリプトを付けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlaneScript2 : MonoBehaviour
{
public ParticleSystem particle1;
ParticleSystem.Burst burst;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnCollisionEnter(Collision collision)
{
burst.count = collision.relativeVelocity.z / 3f;
particle1.emission.SetBurst(0, burst);
Instantiate(particle1, collision.gameObject.transform.position, transform.rotation); // パーティクルを生成
}
}
public でパーティクルシステムを宣言して、新規作成したパーティクルのプレハブをこのスクリプトにアタッチします。
スクリプトの中でParticleSystem.Burst型の変数を作り、衝突時の相対速度のZ座標を元にcountの値を入れます。
ParticleSystem.Burst burst;
// --
burst.count = collision.relativeVelocity.z / 3f;
これをパーティクルのプレハブのEmissionにセットします。
particle1.emission.SetBurst(0, burst);
SetBurst()の第一引数にはburstのインデックスを入れます。インデックスを0にして、今ある1つ目のburstと置き換わるようにしています。
Instanciateでパーティクルを生成すると、衝突時の速さによってパーティクルの数が変わります。