Unityでゲーム、アプリ開発

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

Unity 銃で弾を発射した時にパーティクルを発生させて光らせよう! FPSゲーム作り② Unity学習32

今回はFPSゲーム作りでの銃から弾を発射した時にパーティクルを
発生させて売ってる感を出す方法になります!


銃で弾を発射した時にパーティクルを発生させて光らせよう!

f:id:Phoenix9056:20200517200829p:plain

前回弾を発射させる方法までの説明だったので続きからになります。
Unityを始めたばかりの人は前回の記事を読んでから見た方が分かりやすいと思うので
前回の記事を下記に貼っておきます。

www.unityprogram.info



弾の発射を表現するパーティクルをインポートしていきます。

f:id:Phoenix9056:20200517201150p:plain

エディタ画面の上部にある、Window⇨Asset Storeをクリックして
アセットストアを開いて『WAR FX』と検索し、ダウンロードインポートしてください。

※ブラウザでのインポートは下記リンクより。
assetstore.unity.com

※アセットストアの使い方が分からない方は下記記事を参考にしてください。
www.unityprogram.info


f:id:Phoenix9056:20200517201854p:plain

Project⇨Assets内にある先程インポートした、
WarFX▶︎をクリック⇨_Effects⇨Explosionsをクリックして
その中の一番上のパーティクルの名前を右クリック⇨Renameを選択して
名前をFpsに変更します。
変更する理由は、スクリプトでこのパーティクルオブジェクトを
名前で指定するのに初期の名前だとめんどくさかったからです!笑笑

ちなみに今回使うのは光って演出する場合で煙が出るだけがいい人は、
一個上のBullet Impactsの中から選んでください。

自分が好きなパーティクルを③のScene画面にドラッグ&ドロップしましょう。
f:id:Phoenix9056:20200517204544p:plain

大きさが大きいと思うので好みのサイズに変更するのですが、
①のScale Toolを選択して、②の白い四角のボックスをずらして
大きくしたり小さくしたり表現するサイズに変更してください。

次に④の前回作成したBulletと言う名前のGameObject
重ねるようにドラッグ&ドロップしてBulletの子要素にしてください。
と言うのも弾が出る位置とパーティクルが発生する位置を同じにするためで
微調整は自分で調整してみてください。
位置がBulletと全然違う位置だったら、子要素にした後にInspector内の
TransformPositionの値を全てにすると同じ位置に来るかと思います。



今度はスクリプトを作っていく、変更していきます!

f:id:Phoenix9056:20200517205418p:plain

前回の続きからやっている方はBulletスクリプトを同じ記述にするか
コピー&ペーストして変えてください。
新規の方は、Project⇨Assets内で右クリック⇨Create⇨C# Scriptを選択して
名前をBulletにして記述してください。

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

public class Bullet : MonoBehaviour
{
    //パーティクルシステム型を変数psで宣言します。
    public ParticleSystem ps;
    //GameObject型で変数objを宣言します。
    GameObject obj;
    //GameObject型をbulletで宣言します。
    public GameObject bullet;
    //Rigidbody型を変数rbで宣言します。
    Rigidbody rb;
    //弾の早さ
    public float thrust = 1000;

    private void Start()
    {
        //使うオブジェクトを名前で指定します。
        obj = GameObject.Find("Fps");
        //GetComponentInChildrenで取得して変数psでパーティクルシステムを参照します。
        ps = GetComponentInChildren<ParticleSystem>();
        //Inspectorで設定したオブジェクトを非表示にします。
        obj.SetActive(false);
        //パーティクルシステムはストップしておきます。
        ps.Stop();
    }


    void Update()
    {
        //もしマウスボタンの左クリックが押されたら。
        if (Input.GetMouseButtonDown(0))
		{
            //変数rbでリジッドボディとその位置を参照します。
            rb = Instantiate(bullet, transform.position, transform.rotation).GetComponent<Rigidbody>();
            //前方向に力を加えます。
            rb.AddForce(transform.forward * thrust, ForceMode.Impulse);
            //Inspectorで設定したオブジェクトを表示させます。
            obj.SetActive(true);
            //パーティクルシステムを再生します。
            ps.Play();
        }
        
    }
}

出来た①のスクリプトを新規の方はからのGameObjectにアタッチして
使用すると言うか前の記事見ないと分からないと思いますが、
全記事からやっている方はBulletオブジェクトのInspector内にある
スクリプト③Psの部分にHierarchy内にあるパーティクルを
ドラッグ&ドロップしてください。

コレで完成です!!再生してみましょう!

f:id:Phoenix9056:20200517212738g:plain

っぽくなりましたね!笑笑
またFPSの記事は人気でいい記事も少ないので
率先してあげていきたいと思います!

ご視聴ありがとうございました!

今日のゆうきさんの動画はこちら!
出来ないことをやってみる!うん!無理だよ!笑笑

youtu.be

※Unityを学習していきたい人は下記カテゴリからご覧ください。少々めんどくさい感じです。
www.unityprogram.info

※オススメのアセットの紹介は下記カテゴリから見てみてください。気に入るアセットがあるはずです。
www.unityprogram.info

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

※実際に使って学習した学習本の紹介は下記カテゴリをご覧ください。
www.unityprogram.info

※初心者に向けた簡単な記事は下記カテゴリをみってね!
www.unityprogram.info