Unityでゲーム、アプリ開発

Unityで初めてゲームやアプリを作る人のための支援ブログです。

Unity パーティクルをオブジェクトが落下して削除した時に発生させてみよう! Unity学習31

今回は前回のコインゲーム作りの続きでオブジェクトが落下したら
パーティクルが発生する方法を簡単に説明します。


パーティクルをオブジェクトが落下して削除した時に発生させてみよう!

f:id:Phoenix9056:20200509192230p:plain

どうもゆうきです!
久しぶりの登場です笑笑

休みになればなるほど怠けてしまう...
仕事が自粛でやっていない時ほど気合い入れて
料理も筋トレもキックもブログもゲーム作りもやっていたのに。

今は動画4本作成と別ブログ2記事作成とラントレと筋トレ
料理しかしていません。
かもたまに昼からお酒飲んで寝てしまってます。
怠けてますね!!!!笑笑
明後日から仕事になりますが。

なーんて僕は客観的に見てやっているように見えますが
全てやる事に30分ずつしか時間かけてないんで実際
本当にそんなやっていません。



本題に入っていきましょう。

※前回の続きになっていてObjectDestroyスクリプトとオブジェクトの
作成をしているので分かりづらい方は下記記事を参考にしてください。

www.unityprogram.info


まずアセットストアからオブジェクトが削除された時の
アセットをインポートしてください。
自分のアセットがあればそれを使って参考にまでにしてください。

f:id:Phoenix9056:20200509194009p:plain

エディタ画面の上部にある、Window⇨Assetを選択して
アセットストアを開いて、『Particle Ribbonと検索して
インポートしてください。


f:id:Phoenix9056:20200509193016p:plain

ProjectのAsset内にある先程インポートしたアセット
①Particle Ribbon by Moon⇨②Prefabsをクリックして
③の中から自分が使用したいパーティクルを選択して、
④Scene画面にドラッグ&ドロップしてください。

※パーティクルの向きが僕がシーン画面にドロップした時
横向きになっていたので向きを上向きに動かしました。

次にInspector内から⑤のDurationを1.00秒にして
パーティクルの放出時間を少なくします。
Loopingのチェックは外してください。
そうしないとスクリプトをアタッチしてもずっと再生
されて消えなくなってしまします。
※パーティクルの再生をして確認したいときはチェックを
入れたまま確認する方が楽だと思います。

Start Lifetimeの値をに設定して、パーティクルが早く消えるようにします。
Start Speed14に設定してパーティクルの放出速度を早く設定しましょう。

今度はEmissionにチェックを入れて⑥のRateの値を好きな数字に変更してください。
コレは、1秒間に放出されるパーティクルの量になります。

Shapeにチェックを入れて、
形を⑦にあるConeにして逆三角形のような形で上に発生するようにします。
Angleは20に設定して形が鋭角になるようにします。
Radiusuは0.01と小さい値にして1点に集中してパーティクルが出るよにしましょう。


パーティクルの再生が終わったら削除されるスクリプトを作っていきます。

f:id:Phoenix9056:20200509200129p:plain

Project⇨Asset内で右クリック⇨Create⇨C# Scriptを選択して
名前をEfectDestroyと名前を変更して次のコードをコピー&ペーストするか同じ記述にしてください。

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

public class EfectDestroy : MonoBehaviour
{
    //ParticleSystem型を変数particleを宣言します。
    ParticleSystem particle;

    void Start()
    {
        //パーティクルシステムをGetComponentで取得して変数particleで参照します。
        particle = GetComponent<ParticleSystem>();
    }

    
    void Update()
    {
        //パーティクルの再生が終了したらパーティクルを削除します。
        if (particle.isPlaying == false) Destroy(gameObject);
    }
}

出来上がった①のスクリプトを②のHierarchy内にある
パーティクルにドラッグ&ドロップしてアタッチして、
②のパーティクルをProject⇨Asset内にドラッグ&ドロップして
オリジナルプレファブとして③のようにプレハブ化しましょう。

Hierarchy内に残った②のパーティクルわ削除してください。


f:id:Phoenix9056:20200509201233p:plain

今度は前回作成したObjectDestroyのスクリプト
記述に追加していきます。
次のコードをコピー&ペーストするか同じ記述にしてください。

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

public class ObjectDestroy : MonoBehaviour
{
    public GameObject prefab;
    public Vector3 vector3;

    //スクリプトにアタッチされたコライダーがオブジェクトに接触した時の処理。
    private void OnTriggerEnter(Collider other)
    {
        //オブジェクトを削除します。
        if(other.gameObject)
        {
            Destroy(other.gameObject);

            if(prefab != null)
            {
                Instantiate(prefab, other.transform.position, Quaternion.Euler(vector3));
            }
        }
    }
}

そろそろ僕は眠くなってきました笑笑

Hierarchy内にあるDestroyオブジェクトの
Inspector内にあるアタッチされたスクリプト
Prefabのところに先程Prefab化したパーティクルを
ドラッグ&ドロップキックしてください。

元気にパーティクルも飛んでいくでしょう!

Vector3にはXYZの値はアタッチされたオブジェクトからの
発生位置になるので必要に応じて自分で変更してみてください。

それでわ再生してみましょう!

f:id:Phoenix9056:20200509203944g:plain


こんな感じ。
寝るさよならバイバイ。
無理。

ご視聴ありがとーーーーーーーーーー
ね!


ゆうきさんの今日のゲーム実況!
2017年発売のPS4ゲーム:リトルマテリアル!え?

youtu.be



関連記事

※本格的に3Dゲームを作っていきたい方は下記カテゴリを参考にしてください。
www.unityprogram.info

※オススメの無料アセットは下記カテゴリより。便利なアセットが有ます。
www.unityprogram.info

※Unityを学習していきたい方は下記カテゴリを覗いて見てください。
www.unityprogram.info

※実際に使って読んでみたオススメの本は下記カテゴリからご覧ください。
www.unityprogram.info

※初心者に向けた簡単な記事は下記カテゴリより。
www.unityprogram.info