Unityで銃を撃つ #1 銃のアセットを持たせてパーティクルを再生する

投稿者: | 2019-12-29


リアル銃をFPSコントローラーに持たせて撃ってみます。

アセットストアで銃を検索するとたくさんのアセットが出ます。

無料のものを適当にダウンロード&インポートしてみます。

プレハブから一つ選んでシーンに配置しました。

スタンダードアセットのFPSコントローラも配置します。

銃をプレイヤーに持たせるには、銃のプレハブをFPSコントローラーの子オブジェクトのFirstPersonCharacterの子オブジェクトにします。

ゲーム画面に銃が映るのを見ながら、シーン上で銃の位置や向きを変えました。

レティクルを表示する

フリーの画像素材サイトからレティクルをダウンロードして、Unityにインポートしました。

画像を選択してインスペクタでTexture Typeを「Sprite」にします。

ヒエラルキーウィンドウでImageを新規作成します。

CanvasにImageが畳まれています。

まずCanvasのインスペクタでUI Scale Modeを「Scale With Screen Size」にします。

Imageを選択して、インスペクタのSource Imageにレティクル画像をドラッグアンドドロップします。

画像の位置と大きさがおかしいので修正します。

まず、ImageのRect Transformの左側にある四角い画像をクリックして、Shift,Altを押しながら真ん中を選択します。

画像が真ん中に表示されたら、WidthとHeightで大きさを変更します。

画像を半透明にしたいときは、Colorをクリックしてカラーパレットを出して、アルファチャンネルの値を下げます。

これでレティクルが付きました。

パーティクルとライトを動かす

銃のプレハブをよく見ると、パーティクルとポイントライトが付いています。ポイントライトはデフォルトで非アクティブになっています。

パーティクルはマズルフラッシュと排莢のようです。

これらをスクリプトでオンオフできるようにします。
新しく空のゲームオブジェクトを作って、新規スクリプトを付けます。

マウスの左クリックを押すとパーティクルの再生が始まって、離すと停止させます。ポイントライトはキーボードのTキーでオンオフさせます。

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

public class GunScript : MonoBehaviour
{
    public ParticleSystem gunParticle;

    public GameObject gunLight;


    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetMouseButtonDown(0)) // マウス左クリックを押した時
        {
            gunParticle.Play(); // パーティクルの再生

        }
        else if (Input.GetMouseButtonUp(0)) // マウス左クリックを離した時
        {
            gunParticle.Stop(); // パーティクルの停止

        }

        if (Input.GetKeyDown(KeyCode.T)) // Tキーを押した時
        {
            gunLight.SetActive(!gunLight.activeSelf); // ライトのオンオフ
        }

    }
}

gunLight.activeSelfは、ライトの今のオンオフの状態です。gunLight.SetActive()は、trueを入れるとオンにfalseを入れるとオフになるので、今の状態をNOT付きで入れることで、オフならオンに、オンならオフになります。

パーティクルとライトをスクリプトにアタッチします。

次はアセットにデフォルトで含まれているアニメーションも切り替えてみます。

詳細はこちら→https://store.steampowered.com/app/1730920/Hatch/

コメントを残す

メールアドレスが公開されることはありません。